首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用NetworkStream发送数据

使用NetworkStream发送数据
EN

Stack Overflow用户
提问于 2012-10-06 00:16:38
回答 1查看 2.6K关注 0票数 2

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

send方法如下所示:

代码语言:javascript
复制
    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方法立即发送数据包呢?如果我在每次调用TCPClient方法时声明一个新的NetworkStream和send (大约每分钟60次),那么数据将被分开发送,但这不是一个很好的解决方案。我试过NetworkStream.flush,但不起作用..

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-06 00:25:32

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

当NoDelay为false时,TcpClient在收集了大量传出数据之前不会通过网络发送数据包。由于TCP数据段中的大量开销,发送少量数据的效率很低。但是,确实存在这样的情况:您需要发送非常少量的数据,或者希望您发送的每个数据包都能立即得到响应。

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12750209

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档