【问题标题】:Send data using NetworkStream使用 NetworkStream 发送数据
【发布时间】:2012-10-05 16:16:38
【问题描述】:

在我的 Windows 服务中,我需要将数据流式传输到 tcp 服务器。我声明了一个全局 TcpClient 和 NetworkStream 并在服务启动时启动它们。 每 30 秒,我会通过大约 30-40 个字符串的数组发送到 tcp 服务器。

发送方法如下所示:

    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 秒只发送几个数据包,其中包含所有字符串,我希望每个字符串在一个数据包中发送。

那么如何让 NetworkStream.write 方法立即发送数据包?如果我每次调用 send 方法(大约每分钟 60 次)时都声明一个新的 TCPClient 和 NetworkStream,则数据是单独发送的,但这不是一个很好的解决方案。我尝试了 NetworkStream.flush 但那不起作用..

【问题讨论】:

    标签: c# tcpclient networkstream


    【解决方案1】:

    你应该将TcpClient上的NoDelay property设置为true

    当 NoDelay 为 false 时,TcpClient 不会通过 网络,直到它收集了大量的传出数据。 由于 TCP 段中的开销量,发送小 数据量大,效率低。但是,确实存在您 需要发送非常少量的数据或期望立即响应 从您发送的每个数据包中。

    由于您将其包装在流中,您可能仍需要刷新流以立即发送。

    【讨论】:

      猜你喜欢
      • 2019-10-24
      • 1970-01-01
      • 1970-01-01
      • 2012-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多