まず最初に、私の状況を説明しましょう。私は、通信にソケットを使用するC#のクライアントとサーバーで作業しています。
実用上の理由から、私は両方のソケットの非同期部分を使用して、バイナリシリアル化されたオブジェクトをクライアントからサーバーに、またはその逆に送信します。
私の問題は、一度に送信するオブジェクトが多すぎると、レシーバーオブジェクトがバッファーに「スタック」し、バッファーコンテンツのシリアル化を解除しようとすると、オブジェクトが1つだけになることです。
私の質問は:各オブジェクトをバッファから分離するにはどうすればよいですか?
これが私のReceiveCallback
関数です:
private void ReceiveMessageCallback(IAsyncResult asyncResult)
{
Socket socket = (Socket)asyncResult.AsyncState;
try
{
int read = socket.EndReceive(asyncResult);
if (read > 0)
{
Log("Reception of " + read + " Bytes");
// Jumper is an object that I use to transport every message
Jumper pod = Common.Serializer.DeSerialize<Jumper>(this.readbuf);
Buffer.SetByte(this.readbuf, 0, 0);
socket.BeginReceive(this.readbuf, 0, this.readbuf.Length, SocketFlags.None, new AsyncCallback(ReceiveMessageCallback), socket);
//We fire an event to externalise the analyse process
Receiver(pod, socket);
}
}
catch (SocketException ex)
{
if (ex.SocketErrorCode == System.Net.Sockets.SocketError.ConnectionReset)
{
socket.Close();
Log("Distant socket closed");
}
else
Log(ex.Message);
}
catch (Exception ex)
{
Log(ex.Message);
}
}