C#:在 Socket.BeginReceive 上没有调用 AsyncCallback

haz*_*eal 4 c# sockets

我对 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 永远不会被调用,尽管连接了套接字。

谁能帮我解决这个问题?

jga*_*fin 5

首先,不要忽略 ifEndRecieve返回 0 字节。这意味着连接已被远程端点关闭。

您确定远程端点已向您发送了某些内容吗?我敢打赌,事实并非如此。

我已经完成了很多套接字应用程序,并且我从未遇到过没有调用回调的任何问题。

在回调方法中处理异常也很重要。不这样做会使您的应用程序在抛出异常时崩溃。