我对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。
任何人都可以帮我解决这个问题吗?
答案 0 :(得分:3)
首先,如果EndRecieve
返回0个字节,请不要忽略。这意味着连接已被远程端点关闭。
您确定远程端点已向您发送了什么内容吗?我敢打赌,事实并非如此。
我已经完成了不少套接字应用程序,并且从不在回调未被调用时遇到任何问题。
在回调方法中处理异常也非常重要。如果不这样做会使您的应用程序在抛出异常时崩溃。