【问题标题】:tcp client in c that send and listens : conceptc中发送和监听的tcp客户端:概念
【发布时间】:2012-03-09 12:59:34
【问题描述】:

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

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

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

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

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

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

这个库应该尽可能地便携。 (linux, unix, windows, ...)

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

【问题讨论】:

    标签: c tcp client


    【解决方案1】:

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

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

    【讨论】:

    • 我还能在选择期间发送命令吗?我的用户必须能够随时控制灯光。 (使用 GUI 或 Web 界面等)我必须同时等待用户输入和传入数据。
    • select(2) 采用超时参数。如果您不是为游戏行业工作,则 100 毫秒的超时就足够了。 (即,用户最多需要等待 100 毫秒才能处理他的输入。)
    • 谢谢,我想我会先尝试 select(2),如果它工作正常,我会尝试使用 libuv 改进它
    【解决方案2】:

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

    【讨论】:

    • 我只是发送一个 tcp 命令,希望在每次灯光变化时接收更新。然后服务器为每次更改发送一个包。我只能从同一台电脑建立一个连接。 (服务器不是我写的)
    猜你喜欢
    • 2016-10-03
    • 2015-09-14
    • 2015-01-12
    • 2011-04-25
    • 1970-01-01
    • 1970-01-01
    • 2018-09-19
    • 2012-10-17
    • 2010-11-08
    相关资源
    最近更新 更多