私の Windows サービスでは、データを tcp サーバーにストリーミングする必要があります。グローバルな TcpClient と NetworkStream を宣言し、サービスの開始時にそれらを開始しました。30 秒ごとに、約 30 ~ 40 個の文字列の配列を調べて、TCP サーバーに送信します。
send メソッドは次のようになります。
private void sendMessage(string message)
{
Byte[] data = System.Text.Encoding.ASCII.GetBytes(message);
Globals._stream.Write(data, 0, data.Length);
if (Globals._responseEnabled)
{
data = new Byte[256];
String responseData = String.Empty;
Int32 bytes = Globals._stream.Read(data, 0, data.Length);
responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes);
if (Globals._logStream)
Globals._el.writeEventToWindowsLog("Received: " + responseData, "Info");
}
}
問題は、30 秒ごとに、すべての文字列が内部で結合された少数のパケットのみが送信されることです。文字列をそれぞれ 1 つのパケットで送信する必要があります。
では、NetworkStream.write メソッドを取得してパケットをすぐに送信するにはどうすればよいでしょうか? send メソッドを呼び出すたびに (毎分約 60 回) 新しい TCPClient と NetworkStream を宣言すると、データは個別に送信されますが、これはあまり良い解決策ではありません。NetworkStream.flush を試しましたが、うまくいきませんでした..