使用一个Socket来发送和接收数据

问题描述:

什么更有意义?使用一个Socket来发送和接收数据

  • 使用一个插座以从嵌入式硬件设备
  • 使用发送和接收数据至/一个插座发送数据和独立的套接字读数据

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

+0

谁在进行初始连接,您还是嵌入式设备? – ParmesanCodice 2010-04-05 18:11:23

+0

应用程序正在启动连接,设备被配置为仅响应模式 – volody 2010-04-06 13:48:50

插槽被设计为双向通信,因此最有可能的嵌入式设备的开发人员没有设计他们的系统来处理两个插座。

我有一些经验与嵌入式硬件工作,我已经看到了他们的工作不同的方式:

设备连接到您的应用程序,并通过UDP
开始流数据在这种情况下我见过最多玩三个插座。一个TCP侦听套接字,接受来自嵌入式设备的连接。嵌入式设备然后通过一些连接参数发送数据,比如它将向您发送数据的速度。嵌入式设备然后通过upd开始流式传输数据。一旦收到数据,你会在第二个upd套接字中发送一条消息,说“我得到了那个”。然后设备开始流式传输下一个数据位(再次通过upd)。然后这继续无限。我见过跳过初始TCP连接并且设备只是不断流数据的变体。

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

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

至于你的问题的第二部分,“要尽可能快地接收数据”,这很容易出现异步。以下是异步Socket编程一些优秀的博客:

如果您正在使用自定义/第三方协议与你不能出差错具有设备进行通信一个通过这些无论是读:

我没有专家,但是使用一个套接字有什么缺点吗?

它已经可以发送和接收,我的猜测是,你最终得到更多的开销,如果你有阅读一个插座和一个用于发送...