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

时间:2010-07-14 09:25:14

标签: 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);

这是回调方法:

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);
}

问题在于,尽管已连接套接字,但从未调用ReceiveCallback。

任何人都可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:3)

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

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

我已经完成了不少套接字应用程序,并且从不在回调未被调用时遇到任何问题。

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