3

次の問題があります。アプリケーションに、クエリのためにデバイスにメッセージを送信する単純な TCP クラスがあります。デバイスはメッセージで応答しますが、説明の行末文字はありません。最初に readline 関数を使用しようとして、出力する前に eol 文字が必要であることを発見したシリアルコンバータスキャナー機能にタイムアウトを設定して、接続を切断して移動するか、これを行うためのより良い方法はありますか? 私のコードは以下です:

public String Send_TCP ( InetAddress IPAddress, int POrt, String InData) throws IOException
         {      

        Socket socket = null;
        PrintWriter out = null;
        BufferedReader in = null;

        try {
            socket = new Socket(IPAddress, POrt);
            out = new PrintWriter(socket.getOutputStream(), true);
            in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        } catch (UnknownHostException e) {
            System.err.println("Don't know about host");
            System.exit(1);
        } catch (IOException e) {
            System.err.println("Couldn't get I/O for the connection");
            System.exit(1);
        }

        BufferedReader read = new BufferedReader(new InputStreamReader(System.in));
        ;

        System.out.print("Connected, Sending:"+ InData);

        out.println(InData);
        System.out.println("Equals");
        String str1 = new Scanner(in).useDelimiter(">").next() + ">";
        System.out.println(str1);
        System.out.println("Equals");
        out.close();
        in.close();
        read.close();
        socket.close();
        return str1;
    }
}
4

2 に答える 2

2

あなたの質問を正しく理解しているかどうかはわかりませんが、ソケットにタイムアウトを設定できます: socket.setSoTimeout(int timeout)。参照: javadoc

于 2012-07-11T19:49:40.007 に答える
-1

基本的にバッファが存在するかどうかを確認し、存在しない場合は待機して再度チェックし、メッセージが届かない場合はスキャナ機能のトラップを回避します。

    try {
    BufferedReader rd = new BufferedReader(new InputStreamReader(sock.getInputStream()));
    int count = 1;

        do { 
            if (rd.ready()){
                System.out.println ("Response Ready");
                str = new Scanner(rd).useDelimiter(">").next()+">";
                count = 501;
            }
            Thread.sleep(10);
            System.out.println ("Response Not Ready" + count);
            count ++;
        } while (count < 25);
于 2012-07-14T23:11:37.210 に答える