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

时间:2010-04-05 15:39:42

标签: c# .net

什么更有意义?

  • 使用一个套接字向嵌入式硬件设备发送数据和从嵌入式硬件设备接收数据
  • 使用一个套接字发送数据并将套接字分开以读取数据

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

2 个答案:

答案 0 :(得分:2)

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

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

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

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

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

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

如果您使用自定义/第三方协议与设备通信,那么阅读这些内容就不会出错:

答案 1 :(得分:1)

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

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