我对 System.Net.Sockets.Socket 的异步 Receive 方法有一个严重的问题。
这是我用来打开连接的代码:
_socket = new Socket(endpoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
_socket.Connect(endpoint);
byte[] buffer = new byte[1024];
_socket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, ReceiveCallback, buffer);
Run Code Online (Sandbox Code Playgroud)
这是回调方法:
private void ReceiveCallback(IAsyncResult result)
{
byte[] buffer = (byte[])result.AsyncState;
int count = _socket.EndReceive(result);
if (count > 0)
{
// Do something
}
buffer = new byte[1024];
_socket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, ReceiveCallback, buffer);
}
Run Code Online (Sandbox Code Playgroud)
问题是 ReceiveCallback 永远不会被调用,尽管连接了套接字。
谁能帮我解决这个问题?
首先,不要忽略 ifEndRecieve返回 0 字节。这意味着连接已被远程端点关闭。
您确定远程端点已向您发送了某些内容吗?我敢打赌,事实并非如此。
我已经完成了很多套接字应用程序,并且我从未遇到过没有调用回调的任何问题。
在回调方法中处理异常也很重要。不这样做会使您的应用程序在抛出异常时崩溃。