C #: AsyncCallback не вызывается на Socket.BeginReceive - PullRequest
3 голосов
/ 14 июля 2010

У меня серьезная проблема с асинхронным методом приема System.Net.Sockets.Socket.

Вот код, который я использую для открытия соединения:

_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 Ответ

3 голосов
/ 24 марта 2011

Прежде всего, не игнорируйте, если EndRecieve возвращает 0 байтов. Это означает, что соединение было закрыто удаленной конечной точкой.

Вы уверены, что удаленная конечная точка что-то отправила вам? Держу пари, что это не тот случай.

Я сделал довольно много приложений для сокетов, и у меня никогда не было проблем с тем, что обратный вызов не вызывается.

Также очень важно, чтобы вы обрабатывали исключения в методах обратного вызова. Если этого не сделать, произойдет сбой приложения при возникновении исключения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...