gpt4 book ai didi

java - 检测 ASTM 协议(protocol)传输结束

转载 作者:行者123 更新时间:2023-11-30 10:47:49 27 4
gpt4 key购买 nike

我正在开发一款用于连接分析仪和接收实验室数据的软件。

我遇到了如何检测分析仪和我的软件之间传输结束的问题。

程序正确接收数据,但我遇到了一个问题,即当分析器完成发送数据时如何检测传输结束,以便我可以将其发送到其他服务器。ASTM E1394-97、E13​​81-02/95 的通信规范第 2.2.3 节提到; ETX字符是文本结束的标志,EOT字符是传输结束的标志。

在我的程序中,我检查接收到的字节以检查字符是 ETX 还是 EOT,这样我就可以关闭套接字并使用数据,我还检查接收到的字节是否等于 -1 EOF。

由于未知原因,分析仪未发送任何这些字符 - ETX 和 EOT。

有什么方法可以检测分析仪结束数据传输吗?

以下是接受来自分析器的连接的简单代码。

package ServerClient;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.InetAddress;

public class SimpleServer {

private static ServerSocket server;
private static Socket connection;

public static void main(String args[]) throws IOException {
server = new ServerSocket(5006);

while (true) {
System.out.println(" start... ");
connection = server.accept();
System.out.println("wait for connection");
BufferedReader inFromServer = new BufferedReader(new InputStreamReader(connection.getInputStream()));
DataOutputStream outToServer = new DataOutputStream(connection.getOutputStream());
int i = 0;
StringBuilder sb = new StringBuilder();

do // process messages sent from client
{
try // read message and display it
{
//System.out.println("wait for message");
i = inFromServer.read();

System.out.println((char) i + " " + i);
//System.out.print(" *" + i + " " + (char) i + "* ");
sb.append((char) i);
//byte ACK = 0x06;
//outToServer.writeByte(ACK);
//outToServer.flush();

/*
outToServer.write(0);
i = inFromServer.read();
System.out.println(i);*/
} // end try
catch (Exception e) {
System.out.println(e.getMessage());
connection.close();

break;
} // end catch

} while (true && i != -1);
System.out.println("--------------\n" + sb.toString() + "\n--------------");
connection.close();

}
}
}

最佳答案

您正在使用无限While 循环,因此您将无法在从分析仪接收到ETX 字符后中断循环。对于ASTM 通信分析器你必须在收到 ETX 字符后打破循环。下面的代码完全运行完美。

请查看下面的链接,您将获得很多有关 ASTM 的帮助

链接: ASTM Communication Detail and Its fully Example

   while (true) {
while((clientIntMessag=inFromClient.read())!=ASCIIValues.ETX) {
currentMsg += "" + (char) clientIntMessage;
if (clientIntMessage == ASCIIValues.ENQ) {
outToClient.writeBytes("" + ASCIIValues.ACK);
}
if (clientIntMessage == ASCIIValues.LF) {
outToClient.writeBytes("" + ASCIIValues.ACK);
}
if (clientIntMessage == ASCIIValues.NAK) {
outToClient.writeBytes("" + ASCIIValues.EOT);
}
}

System.out.println(currentMsg);

currentMsg = "";


}

如果您仍然有任何困惑,请告诉我..

关于java - 检测 ASTM 协议(protocol)传输结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36031607/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com