没有使用异步套接字接收所有数据

时间:2012-12-03 23:49:25

标签: c# sockets networking asynchronous

所以,我有一个异步套接字设置但是当我读取数据时并不是所有的都被接收。有时大多数数据都会被接收,有时则不会。然后它挂起我的程序的一部分,因为它没有收到要解析/处理的数据。

代码:

public static void OnArrival(IAsyncResult ar)
{
    connection = (Socket)ar.AsyncState;
    string data;
    try
    {
        int bytesRead = connection.EndReceive(ar);
        if (Sock.IsConnected(connection))
        {
            connection.BeginReceive(BufferData, 0, BufferData.Length, SocketFlags.None, new AsyncCallback(OnArrival), connection);
        }
        else
        {
            connection.Close();
        }
        if (bytesRead > 0)
        {
            data = System.Text.Encoding.ASCII.GetString(BufferData, 0, bytesRead);
            HandleData.ProcessData(connection, data);
        }
    }
    catch (Exception ex)
    {
        Logger.WriteError(ex.ToString());
        connection.Close();
    }
}

调用HandleData.ProcessData时,并不是所有数据都被接收。 有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您在BufferData完成之前使用BeginReceive。切换到同步IO或正确实现异步IO(使用回调或任务)。