【问题标题】:Use one Socket to send and recieve data使用一个 Socket 发送和接收数据
【发布时间】:2010-04-07 05:09:04
【问题描述】:

什么更有意义?

  • 使用一个套接字向/从嵌入式硬件设备发送和接收数据
  • 一个socket发送数据,一个socket读取数据

通信不是很密集,但重要的是尽可能快地接收数据。应用程序可在 Windows XP 及更高版本下运行。

【问题讨论】:

  • 谁在进行初始连接,您还是嵌入式设备?
  • 应用程序正在启动连接,设备配置为仅响应模式

标签: c# .net


【解决方案1】:

套接字是为双向通信而设计的,因此嵌入式设备的开发人员很可能没有将他们的系统设计为使用两个套接字。

我有一些使用嵌入式硬件的经验,并且我看到它们以各种方式工作:

设备连接到您的应用程序并通过 UDP 开始流式传输数据
在这种情况下,我已经看到多达三个套接字在起作用。一个接受来自嵌入式设备的连接的 TCP 侦听套接字。嵌入式设备然后通过一些连接参数发送,例如它将以多快的速度向您发送数据。然后嵌入式设备通过 upd 开始流式传输数据。收到数据后,您会通过第二个 upd 套接字发送一条消息,说“我收到了”。然后设备开始流式传输下一位数据(再次通过 upd)。然后这种情况无限期地继续下去。我已经看到了跳过初始 TCP 连接而设备只是不断地传输数据的变体。

请求/响应
您需要多少个套接字取决于谁在进行初始连接,因为这将决定谁需要监听套接字。由于您正在建立初始连接,因此我将使用它。这是更面向连接的场景。在这里,您与设备建立连接并请求一些数据,然后设备向您发送对该数据的响应。 在这种情况下,您只能使用一个套接字。因为设备会响应收到的套接字上的每个请求。

所以要回答您的问题“什么更有意义?”,这完全取决于您的嵌入式设备的设计。如果它在您请求的同一个套接字上响应,那么答案很简单,因为只有一个套接字是可能的。通过 upd 的流设备应该通过两个套接字提供更好的性能,但前提是您的设备支持它。

至于您问题的第二部分,“尽可能快地接收数据。”,这很容易异步。这里有一些关于异步套接字编程的优秀博客:

如果您使用自定义/第三方协议与设备进行通信,那么阅读以下内容也不会出错:

【讨论】:

    【解决方案2】:

    我不是专家,但只使用一个插座有什么缺点吗?

    它已经可以发送和接收,我猜如果你有一个用于读取的套接字和一个用于发送的套接字,你最终会得到更多的开销......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-11
      • 2013-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多