2009-04-29 6 views
1

私は、メッセージの承認を聞いてそれらを処理するはずのスレッドを持っていますが、スレッドは承認を受信して​​いないようです。こここのバッファされたリーダーにデータが受信されないのはなぜですか?

スレッドに関連するコードである:

private class TcpReader extends Thread { 

    BufferedReader reader; 
    boolean running = false; 
    public TcpReader(BufferedReader reader) 
    { 
     this.reader = reader; 
    } 

    public void run() { 
     running = true; 

     while (running) { 
      try { 
       String line = reader.readLine(); 
       logger.debug("TCP READER RECIEVED MESSAGE ["+ line + "]"); 
       // Do stuff 
      } catch (Exception e) { 
      } 
     } 
    } 
} 

スレッドが別のクラスで行われ、次のコードで作成されている:変数は以下のように部材にインスタンス化され

sock = new Socket(hostName, port); 
out = new PrintWriter(sock.getOutputStream(), true); 
isConnected = true; 
BufferedReader reader = 
     new BufferedReader(new InputStreamReader(sock.getInputStream())); 
tcpReader = new TcpReader(reader); 
tcpReader.start(); 

変数:

Socket sock; 
PrintWriter out; 
BufferedReader in; 

実行の流れは私のサーバークラスです。メッセージを受信し、クライアントがピックアップすると考えられるACKで応答します。 しかし、クライアントはackが続行されるのを待たないので、別のスレッドはすべての応答を待ちます。

readlineコードは何も読み取らない。

メッセージが私のサーバーから送信されていると、彼らは彼らの最後の2つの文字として「\ r \ nを」持っています。

+0

少なくとも、例外が発生した場合は、例外を静かにキャッチすることはできません。 – iny

+0

例外は静かにキャッチされません。関連性のないコードを抜き出しました。 –

+0

これは関連しています... –

答えて

3

はすなわち、それはもう一方の端に出力ストリームをフラッシュされ、サーバから送信された行末文字ですか? telnetまたは単純なパケットスニッファーを使用して、何が送信されているかを確認できます。サイドノート、running

は、おそらく揮発性としてマークされるべきです。

+1

出力ストリームサーバー側をフラッシュすると感謝しました。 –

+0

end-of-lineの原因は、*いくつかの* PrintStreamメソッドの特異性です(どのように感じるかによって異なります)。 PrintWriterは異なる奇数です。それを意味するときfluchを使用してください。 –

2

ExceptionreadLineによって提起されている場合は、何も記録されません。

0

情報が不十分です。あなたは出力バッファをフラッシュしていないと推測されます。

も注意してください、あなたは、文字エンコーディングを指定していません。

関連する問題