首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检测ASTM协议的传输端

检测ASTM协议的传输端
EN

Stack Overflow用户
提问于 2016-03-16 09:33:33
回答 1查看 2.7K关注 0票数 2

我正在实现一个软件连接到分析器和接收实验室数据。

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

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

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

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

有什么方法来检测分析器是否结束了数据的传输?

下面是接受分析器连接的简单代码。

代码语言:javascript
复制
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();

        }
    }
}
EN

回答 1

Stack Overflow用户

发布于 2018-03-27 13:01:45

您使用的是无限时间循环,因此在ETX字符从analyzer.For ASTM通信接收到分析器后,您将无法中断循环,您必须在ETX字符接收到.below代码后中断循环。

请看下面的链接,您将得到许多关于ASTM的帮助。

链接: ASTM Communication Detail and Its fully Example

代码语言:javascript
复制
   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 = "";


        }

如果你还有任何困惑,请告诉我..。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36031607

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档