c中发送和侦听的tcp客户端:概念



我正在研究用C制作一个tcp客户端。但在我开始之前,我想听听你的建议。

客户端用于控制灯光和其他设备。

有了这个客户端,我需要发送命令,但当有人关灯时,我也可以接收事件。

只是用套接字发送命令是没有问题的。但与此同时,我必须阅读收到的包裹。

如何最好地解决这个问题?我需要使用线程吗?或者我可以用libevent之类的东西来解决这个问题吗?

大多数人是如何实现这样的东西的?

这个库应该是尽可能可移植的。(linux、unix、windows…)

(我不是在寻找代码,而是一种最佳方法)

BSD套接字是双向的,您可以通过选择(2)来检查套接字是否有传入数据

  • http://rhoden.id.au/doc/sockets2.html
  • 或在SO中搜索"套接字选择":https://stackoverflow.com/search?q=socket+选择

IMHO使用libevent对您的目的来说太过分了。这很好,但你要实现它的力量还有很长的路要走。实际上,libevent是select(2)或其改进的后续epoll(2)等的包装器。

我认为您必须有两个连接,一个用于发送命令,另一个用于在有人关灯时从服务器获得响应,大多数时候两个连接处于睡眠状态。如果只创建一个连接,则必须每隔xx毫秒查询一次灯光状态,大多数时候这会浪费带宽。如果您的应用程序不严重,服务器可以使用UDP在有人关灯时通知客户端,该解决方案只需要一个实时TCP连接。

最新更新