TcpClient を使用してデータをバイトとして送信しましたが、データのバイトではなく独自のクラスを送信したいと考えていました。
データのバイトとは、次のようにバイトに変換されたデータを送信することを意味します。
using (MemoryStream bufferStream = new MemoryStream())
{
using (BinaryWriter bufferData = new BinaryWriter(bufferStream))
{
// Simple PONG Action
bufferData.Write((byte)10);
}
_logger.Info("Received PING request, Sending PONG");
return bufferStream.ToArray();
}
代わりに、サイズやw / eを宣言することなく、このように送信したいと思います
public class MyCommunicationData
{
public ActionType Action { get; set; }
public Profile User { get; set; }
...
}
通常、データをバイトとして送信する場合、最初の 5 バイトを使用してアクションとメッセージ サイズを示します。
しかし、すべてのデータを単一のクラスとしてシリアル化するように移行した場合、それがどのようなアクションとサイズであるか、またはシリアル化されたメッセージを使用して、クライアントとサーバーが何を読み取るべきかなどを知る必要があるか、またはそうする方法がありますか?シリアル化オブジェクトから指定する必要なく送信しますか?
ここで問題があるかどうかはわかりませんAsyncCallback
が、ネットワーク ストリームの読み取りと書き込みに使用しています。
_networkStream = _client.tcpClient.GetStream();
_callbackRead = new AsyncCallback(_OnReadComplete);
_callbackWrite = new AsyncCallback(_OnWriteComplete);
他の機能を投稿する必要がある場合はお知らせください。