2011-07-06 11 views
0

私はJavaクライアントアプリケーションで遊んでいます。動作は、このポスト(他)と非常によく似ています:クライアント例外:ソフトウェアの接続が中止されました:recv failed

java.net.SocketException: Software caused connection abort: recv failed

私は答えを見つけることができてきたように、まだ - それゆえ、このポストを。私は何が間違っているのか考えているが、それについて何をすべきか分からない。

プロトコルは単純です - いくつかのデータを読み込み、ACKを返信して繰り返します(termintedまで)。

私はWireSharkで何が起こっているのか見てきましたが、TCPウィンドウがいっぱいになっているようです。私はDataOutputStream(ACKs)のflush()を実行していますが、この例外が発生した後は事実を変更しません(WireSharkで、Java例外の直前に常にウィンドウの問題があることがわかります) 。

私はどのように私のTCPウィンドウ/バッファが明確である(私は問題の根本的な原因だと思いますか?)JavaでどうやったらDataInputStream上に何もないように見えます。私がそれを読んでいる間、TCPスタックがいっぱいになっているのを驚かせてください。私は基本的なコードを添付しました

多くのおかげ

マークは、以下を呼び出します:

 public void connectToServer() 
{ 
    //Create socket connection  
    try 
    { 
     if (lSocket == null) 
     { 
      lSocket = new Socket("localhost", 7651); 
      lSocket.setSoTimeout(0); 
      lInDataStream = new DataInputStream(lSocket.getInputStream()); 
      lOutDataStream = new DataOutputStream(lSocket.getOutputStream()); 
     } 
    } 
    catch (UnknownHostException e) 
    { 
     System.out.println("Unknown host: localhost"); 
    } 
    catch (IOException e) 
    { 
     System.out.println("No I/O"); 
    }  
} 

public void readSocket() throws IOException 
{ 
    //Receive data from ROS SerialtoNetwork server 
    if (lSocket != null) 
    { 
     lInDataStream.readInt();  
     lInDataStream.readFully(cbuf); 

     lOutDataStream.writeBytes("Ack"); 
     lOutDataStream.flush(); 

     //String lstr = new String(cbuf); 
     //System.out.print(lstr); 
     //System.out.println(""); 
    } 
} 

public String getDataBuffer() 
{ 
    String lstr = new String(cbuf); 
    return lstr; 
} 
+0

キャプチャファイルを追加できますか? – nc3b

+0

[java.net.SocketException:ソフトウェアが接続を中断させた可能性があります:recv failed]の重複可能性(http://stackoverflow.com/questions/135919/java-net-socketexception-software-caused-connection-abort-recv-failed) – EJP

答えて

0

これは、永続的なネットワークエラーを示します。このエラーには、(繰り返しの)MSDN記事がいくつかあります。 this one

+0

リンクについてはどうですか? –

+0

@KevinWong確かに、editを見てください。 – EJP

関連する問題