2012-02-18 108 views
0

我正在研究在c中创建一个tcp客户端。 但是在我开始之前,我想向您提供一些建议。c发送和侦听的tcp客户端:概念

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

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

只需用套接字发送命令就没有问题。 但同时我必须阅读收到的包。

这最好的解决方法是什么? 我是否需要使用线程,还是可以用libevent之类的东西解决这个问题?

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

这个库应该尽可能的便携。 (Linux操作系统,UNIX,Windows和...)

(我不是在寻找的代码,而只是一个最好的方法)

回答

1

BSD套接字是双向的,你可以检查你的插座有传入数据或不被选择(2)

IMHO使用的libevent是太多你的目的。这很好,但你还有很长的路要去实现它的力量。其实libevent是选择(2)或其改进的继任epoll(2)等的包装

+0

我可以在选择期间发送命令吗?我的用户必须能够随时控制灯光。 (使用GUI或Web界面或其他)我必须同时等待用户输入和输入数据。 – r03 2012-02-18 09:23:35

+0

select(2)取超时参数。如果你不是为游戏行业工作,超时100毫秒就足够了。 (即用户需要等待最多100毫秒的时间来处理他的输入。) – nodakai 2012-02-18 10:31:31

+0

谢谢,我想我会尝试先选择(2),如果它工作正常,我会尝试使用libuv – r03 2012-02-18 12:13:04

0

我认为你必须有两个连接,一个用于发送命令,一个用于获取来自服务器的响应,当有人关灯时,大多数时候两个conns是睡觉。如果只创建一个连接,则必须每xx毫秒查询灯光状态,大部分时间浪费带宽。如果你的应用程序不严重,服务器可以使用UDP通知客户端什么时候关灯,哪个解决方案只需要一个实时TCP连接。

+0

我只是发送一个tcp命令,我希望在每次灯光变化时都收到更新。服务器比为每个更改发送一个包。我只能从同一台电脑上建立一个连接。 (我没有写服务器) – r03 2012-02-18 09:39:41