Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 未使用异步套接字接收所有数据_C#_Sockets_Networking_Asynchronous - Fatal编程技术网

C# 未使用异步套接字接收所有数据

C# 未使用异步套接字接收所有数据,c#,sockets,networking,asynchronous,C#,Sockets,Networking,Asynchronous,因此,我有一个异步套接字设置,但是当我读取数据时,并没有收到所有的数据。有时大多数数据都会被接收,而有时则不会。然后它挂起在我程序的一部分上,因为它没有收到要解析/处理的数据 代码: 调用HandleData.ProcessData时,不会接收所有数据。 有什么想法吗?在BeginReceive完成之前,您正在使用BufferData。切换到同步IO或正确实现异步IO(使用回调或任务) public static void OnArrival(IAsyncResult ar) { con

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

代码:

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

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

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