在我可以读取数据之前重置套接字连接

时间:2013-02-27 18:23:59

标签: c# .net sockets

我在使用.net套接字从客户端接收数据时遇到问题。客户端正在与TCP通信并在立即关闭连接之前发送一个或两个数据包。招待会是这样的:

Socket newConnection = listener.EndAccept(ar);
newConnection.BeginReceive(myBuffer,0, length, SocketFlags.None, Callback,null);

并且执行不会更进一步。 beginReceive将立即抛出一个SocketException,表示连接已重置。我无法获得收到的数据。

以下是我在wireshark上看到的这个连接:

SYN // SYN, AKC // AKC
PSH, ACK for 156 bytes
PSH, ACK for 176 bytes
RST, ACK

就是这样。即使连接被客户端关闭,有没有办法获得这些接收数据?

1 个答案:

答案 0 :(得分:-1)

首先,通过这种类型的通信,切换到UDP而不是TCP可能是个好主意 - 这样,无论发送者的状态如何,您都可以获取数据包。
假设TCP是唯一的选择 - 我建议使用同步调用:

Socket newConnection = listener.AcceptSocket();
newConnection.Receive(myBuffer, 0, length, SocketFlags.None);