.netソケットを使用してクライアントからデータを受信する際に問題が発生しました。クライアントはTCPと通信しており、直ちに接続を閉じる前に1つまたは2つのパケットを送信しています。レセプションは次のようになります:データを読み取る前にソケット接続をリセットしました
Socket newConnection = listener.EndAccept(ar);
newConnection.BeginReceive(myBuffer,0, length, SocketFlags.None, Callback,null);
これ以上実行されません。 beginReceiveは接続がリセットされたことを示すSocketExceptionを即座にスローします。私は受け取ったデータを得ることができません。
SYN // SYN, AKC // AKC
PSH, ACK for 156 bytes
PSH, ACK for 176 bytes
RST, ACK
そして、それはそれだ:ここでは
は、私はWiresharkの上でこの接続のために見るものです。接続がクライアントによって閉じられていても、この受信データを取得する方法はありますか?
はあなたが閉じる前に、あなたの受信プログラムからのパケットを「認めた」ために、あなたのクライアントは待つことができます方法はありますか? –
私は本当にできません。クライアントは他のサーバーで使用されていて動作しているので、同じことができるはずです。私はこれらの他のサーバーのソースコードにアクセスすることはできませんどのようにそれを参照してください。 –
RSTが到着する前にデータを読み取っていない場合、これはあまりできません(これは、送信者が強制終了を行っていることを示しています)。送信者がFINの代わりにRSTを送信する理由(つまり、[Socket.Shutdown](http://msdn.microsoft.com/en-us/library/system.net.sockets.socket.shutdown.aspx) )? –