2016-04-19 9 views
0

私のアプリケーションは、基本的にコマンドに基づいてデータを印刷するプロッタマシンであるハードウェアに接続します。私はソケット接続を行い、いくつかのコマンドを起動しています。ハードウェアにはコマンドが届いていますが、実行されたコマンドの戻り値を取得することはできません。以下はサンプルコードです。エラーはありませんが、この行の実行時に文字列cmd = in.readLine();それは固まった。Javaでソケットを使用してコマンド火災の戻り値

Main.Java

public class Test 
{ 
    public static void main(String[] args) 
    { 
     try 
     { 
      PrintTest printTest = new PrintTest(); 
      printTest.print(); 
     } 
     catch (Throwable e) 
     { 
      e.printStackTrace(); 
     } 
    } 
} 

方法、それは改行に遭遇するまで、あなたが立ち往生している理由ですので

public void print() throws IOException 
{ 
    Socket socket = null; 
    try 
    { 
     socket = new Socket(); 
     socket.connect(new InetSocketAddress(host, port), 10); 
     System.out.println("isConnected :- " + socket.isConnected()); 

     BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
     BufferedWriter out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); 
     out.write("TC1004,1;");  
     out.flush(); 
     String cmd = in.readLine(); 
     System.out.println("Recieved: " + cmd); 
     } 
     catch (Throwable ex) 
     { 
      ex.printStackTrace(); 
     } 
     finally 
     { 
      if (socket != null) 
      { 
       socket.close(); 
      } 
     } 
    } 
} 
+0

多分、行に '\ n'が必要です。 – TomN

+0

'\ n'に達していない場合、readLine()はインストリームからデータを受信し続けるでしょう。 – TomN

+0

@TomN: '\ n'でコードを書いてください。 – Harshil

答えて

1

readLine();は、読んで(またはブロック)します。しかし、どちらのコマンドでも改行を使用していませんでした。これは、コマンドに分かりやすいようにいくつかの合意された形式がなければならないためです(flush()では不十分です)。

私はプロッタが返信するものを読む前に、\nでコマンドを完了するのを待っていると思われます。

関連する問題