同じコンピューターで実行されている別のTcpClientに非常に小さなデータ(日付)を送信する際に問題が発生します。
以下のコードでは、NetworkStreamを閉じる前にスリープしていることがわかります。削除するSleep
と、データがもう一方の端に表示されないという断続的な問題が発生します。
私はここで何か間違ったことをしていますか?
using (TcpClient client = new TcpClient())
{
client.Connect(new IPEndPoint(IPAddress.Loopback, _tcpServerPort));
NetworkStream clientStream = client.GetStream();
byte[] buffer = new ASCIIEncoding().GetBytes(theDateObject.ToString("yyyy-MM-dd HH:mm:ss"));
clientStream.Write(buffer, 0, buffer.Length);
clientStream.Flush();
System.Threading.Thread.Sleep(1000); // Remove this line and the data may not arrive at the other end
clientStream.Close();
}
その他の情報:
- 一部のコンピューターでは、問題を引き起こさずに削除できます
Sleep
(遅いコンピューターですか?) - (スリープする代わりに)でNetworkStreamを閉じようとしました
Close(int timeout)
が、役に立ちませんでした。 - 1000ミリ秒の値は任意です。他の値でも機能すると思います。問題は、そもそもなぜそれが必要なのかということです。