これは、私が何をしても、パケットが一緒に押し込まれて相手を区別しなければならないためです(オブジェクトは簡単、可変文字列は痛みを伴う可能性があるため)。これを避ける方法はありますか?あなたは、2つの1回の後に起こる送信見ることができるようにここでTcpclient.NoDelay = trueの後でも、socket.sendはパケットを一緒に追加します。
は、私が働いているいくつかの粗コード(はい、初期化がここで起き、これが悪いのプログラミング規則についてとても残念ラフテストコードである)
sender.Connect("localhost", 8523);
sender.Client.SendTimeout = 1000;
sender.NoDelay = true;
byte[] buffer = ASCIIEncoding.ASCII.GetBytes(message);
sender.Client.Send(buffer);
buffer = ASCIIEncoding.ASCII.GetBytes("DISCONNECT");
sender.Client.Send(buffer);
sender.Client.Close();
ですもう一方とソケットは、それらを一緒に送信することが最適であると判断します。それは素晴らしいですが、私はそれを望んでいません。したがって、もう一方の端に、それは
helloDISCONNECT
なってしまう私は、彼らが自動的にブロッキングキューにロードされているように、2つの分離で受信する必要があると私は、オブジェクトのサイズや文字列解析に対処する必要はありません。
あなたは、どのパケットに基づいてプログラミングするのではなく、全体をストリームのように扱うことを強くお勧めします。これは答えではありませんが、コメントの中の提案です(はい、これはあなたが何らかの解析をする必要があることを意味します)。 – payo
別の提案は、あなたのためにこれらの詳細を包む図書館で、例えばWCF(http://msdn.microsoft.com/en-us/library/ms734712.aspx) – payo
TCPは常にストリームであり、パケットベースのプロトコルではありません。 'NoDelay'は正確さには影響せず、パフォーマンスのみに影響します。 – CodesInChaos