私は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;
}
キャプチャファイルを追加できますか? – nc3b
[java.net.SocketException:ソフトウェアが接続を中断させた可能性があります:recv failed]の重複可能性(http://stackoverflow.com/questions/135919/java-net-socketexception-software-caused-connection-abort-recv-failed) – EJP