0

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

代码:

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 被调用时,并不是所有的数据都被接收到。有任何想法吗?

4

1 回答 1

1

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

于 2012-12-04T00:04:45.460 回答