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 に答える