【问题标题】:How send one bit(no byte) through ethernet port如何通过以太网端口发送一位(无字节)
【发布时间】:2015-07-21 06:56:06
【问题描述】:

我正在编写一个网络应用程序。速度在我的应用程序中非常重要,我通过以太网端口发送字节,在这种情况下速度约为 350 us,见下图:

http://i59.tinypic.com/2zgu8id.jpg

我想通过以太网端口发送比特以降低速度,我有以下问题:

1- 会影响速度吗?怎么做? msdn网站上没有这种东西。

https://msdn.microsoft.com/en-us/library/system.net.sockets.socket%28v=vs.110%29.aspx

2- 多发送字节使用多窗口应用程序更好吗?

【问题讨论】:

  • 按比特发送而不是按字节发送并不一定会提高速度。此外,在同一网络中工作的多个应用程序也不一定会提高速度。我建议先压缩你要发送的文件,这样你要发送的数据更少,因此发送速度会更快,然后接收端必须再次解压缩数据。这意味着您的应用程序需要更多的处理能力,但发送和接收数据所需的时间更少。
  • 最小的分配单位是字节,不能只发送一点
  • 假设你可以。那会快多少?它有什么用处?
  • 为什么Stopwatch 不在SendTo 之前开始?
  • 以太网处理数据包,而不是比特。它也不发送单个字节,它创建并发送数据包。发送更少的数据会降低吞吐量,因为它会导致更多的数据包。最后,以太网设置由 驱动程序 控制。套接字和 C#(或任何其他语言)没有它们的概念,也不需要

标签: c# sockets ethernet


【解决方案1】:

除了您发送的每条消息外,还包含一个标头,例如包含目标地址。如果没有这些信息,您的消息将永远无法到达目的地。

一个典型的 IPv4 标头是 20 个字节。因此,即使有可能,8 位的数据量也不会比 1 位多 700%,而是多 33%。

由于每条消息都包含这样的标头,因此您应该尝试包含尽可能多的数据以减少需要发送的消息数量。

如果这个答案没有帮助,你可能想包括你的最终目标,你想要实现什么?

【讨论】:

  • 我的最终目标是读取线扫描相机的数据并处理数据并发送输出,我在读取相机的帧数据方面没有任何问题,我的问题是windows应用程序处理数据的时间很长,这一次发送时间是 350 我们很好,但我想发送 40 个输出命令,变成大约 16 毫秒,这是不好的,发送 40 输出的好时间对我来说是 2 毫秒。我长时间丢失帧数据
  • 我不明白你为什么需要发送一个比特 - 你只能从一次发送更多数据中获益。此外,接收这些命令的顺序是否重要? (使用 UDP,它们可以按任何顺序到达)
  • 好的,非常感谢,所以我使用 TPL DataFlow 将数据作为流处理。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-11
  • 1970-01-01
  • 1970-01-01
  • 2018-09-14
  • 2011-09-05
  • 1970-01-01
相关资源
最近更新 更多