0

我正在开发一个嵌入式系统,它使用 TCP 套接字通过以太网连接到 PC。PC 是 TCP 客户端,嵌入式系统是服务器。如果我理解正确的话,经典的通信模型是客户端向服务器发送一些数据,服务器每次都会响应。服务器从不发起通信。

我想做的是从 PC 向嵌入式系统发送命令,而没有相应的响应。然后嵌入式系统将执行命令描述的任务。如果嵌入式系统有错误,或者有一些状态信息要报告回来,它会发回这些信息,而不被 PC 轮询。

除了PC端的接收之外,我已经弄清楚了一切。我正在用 C#.net 编写 PC 应用程序 我可以设置一个回调,只要在套接字上接收到数据就会触发吗?我见过的每个示例都以阻塞方式使用接收方法。

4

2 回答 2

0

您可以在套接字流上使用异步 I/O。这几乎正​​是您所要求的 - 您开始接收操作并在接收完成时给它一个回调以调用。

查看 BeginReceive/EndReceive 函数。

更多信息在这里:http: //msdn.microsoft.com/en-us/library/bbx2eya8.aspx

于 2012-08-24T14:47:50.813 回答
0

当然,总而言之是肯定的。

您要做的是为每个连接的客户端启动一个新线程,然后在事件/命令线程上引发事件。除了(这由操作系统的 TCP/IP 堆栈处理)之外,您没有义务响应请求(这由您的操作系统的 TCP/IP 堆栈处理)在您收到数据包时发送 ACK(不要担心操作系统为您执行此操作的这一部分,它是TCP/IP 可靠的部分原因)。

只要套接字处于活动状态,您就应该能够向客户端发送回响应,所以基本上只要任何命令正在运行,您就需要保持套接字处于活动状态。

以下是 Microsoft 的示例列表,应向您展示如何执行此操作。http://msdn.microsoft.com/en-us/library/bew39x2a.aspx#Y0

于 2012-08-24T14:49:36.610 回答