当前位置: 首页 > 知识库问答 >
问题:

使用NetworkStream发送数据

鲜于海
2023-03-14

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

那么如何获取网络流呢。写入方法立即发送数据包?如果每次调用send方法(大约每分钟60次)时都声明一个新的TCPClient和NetworkStream,那么数据将分别发送,但这不是一个很好的解决方案。我尝试了NetworkStream。同花顺,但那不起作用。。

共有1个答案

华森
2023-03-14

您应该将TcpClient上的NoDelay属性设置为true;

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

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

 类似资料:
  • 问题内容: 为什么在下面的代码中将数据发送为JSON格式而不是? 问题答案: 因为您既未指定请求内容类型,也未指定正确的JSON请求。这是发送JSON请求的正确方法: 注意事项: 使用此方法将javascript对象转换为本地和内置于现代浏览器中的JSON字符串。如果要支持较旧的浏览器,则可能需要包含json2.js 使用属性指定请求内容类型,以便向服务器指示发送JSON请求的意图 该属性用于服务

  • 问题内容: 我想使用JavaScript中的XMLHttpRequest发送一些数据。 说我的HTML形式如下: 如何在JavaScript中使用XMLHttpRequest编写等效项? 问题答案: 下面的代码演示了如何执行此操作。

  • 问题内容: 我具有以下从数据库中提取数据的功能。ajax调用正常工作。如何将成功功能中制表符分隔的数据发送给用户?将连接类型设置为“ application / vnd.ms-excel”无效。成功警报将显示格式正确的数据。 我不想在浏览器中显示数据-我想将其发送到Excel。 编辑: 我找到了一种方法来做我想要的。我没有将用户重定向到会提示他们保存/打开Excel文件的新页面,而是在隐藏的ifr

  • 问题内容: 这是我的 在我的控制器中 但是当我在Chrome中看到“网络”标签时, 如何将其作为有效载荷发送?所以那URL是 和数据一样 我的端点希望数据是请求的一部分,以便可以将其解析为 问题答案: 我正在共享我的代码库中的代码,该代码在按照@lucuma的建议进行更改后有效 The UserService looks like and ProfileController looks like

  • 问题内容: 我想以ajax的形式发送所有输入。我有这样的形式。 在.js文件中,我们有以下代码: 但这不起作用。我不想使用Form数据。 问题答案: 只要我们要发送具有名称属性的所有表单输入字段,就可以对所有表单执行此操作,而与字段名称无关: 第一个解决方案 第二个解决方案 :在此解决方案中,您可以创建一个输入值数组:

  • 问题内容: 我在活动A中有一个整数数组: 而且我想将该变量发送到活动B,所以我创建了一个新意图并使用putExtra方法: 在活动BI中获取信息: 但这不是真正发送数组,我只是在arrayB上获得了值“ 0”。我一直在寻找一些例子,但没有发现任何事。 问题答案: 你正在使用数组设置额外内容。然后,你尝试获取单个int。 你的代码应为: