2012-12-03 93 views
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被調用時,不是所有的數據被接收。 任何想法?

回答

1

您在BeginReceive完成之前正在使用BufferData。切換到同步IO或正確實現異步IO(使用回調或任務)。