【问题标题】:Client/Server Program in CC 中的客户端/服务器程序
【发布时间】:2014-12-10 16:47:26
【问题描述】:

我是 C 套接字编程的新手。我知道如何将 TCP 和 UDP 编写为不同的程序。 但只有一台服务器应该同时处理这两个客户端。

谁能告诉我如何编写一个同时处理 TCP 和 UDP 客户端的服务器?

【问题讨论】:

  • 第一步:打开一个文本编辑器。第 2 步:考虑处理 TCP 和 UDP 的必要代码。第三步:输入代码。恭喜,您已经编写了所需的代码。编译和运行它也可能很有用。

标签: c sockets client-server


【解决方案1】:

您无法使用 1 个服务器套接字侦听 TCP 和 UDP 客户端。但是,您可以创建 2 个服务器套接字(一个 TCP 服务器和一个 UDP 服务器)。请注意,两者都拥有一台服务器甚至没有意义:UDP 是无连接的,因此当您尝试在服务器套接字上执行 accept 时出现第一个问题(因为它是一个假设的混合版本,accept 应该做什么?)。

无论如何,我假设您希望在同一个事件循环中拥有两台服务器(如果您不知道它是什么,将其视为您的主函数就足够了)。由于默认情况下 C 套接字是阻塞的,因此您不能开箱即用地运行两个服务器。

您可以使用select(谷歌搜索)。如果您不知道它是什么,我建议您先在 Python 中尝试一下。在 Python 中,它相当简单,它会让你对这个概念有一些了解。基本上你要做的是:创建多个服务器套接字而不是在这些套接字之间“切换”,查看哪些套接字已读取事件(无论是新连接还是消息),然后处理这些事件。

我可以推荐libuv。它是最初为 Node.js 构建的 C 库。在 libuv 之前,他们使用平台相关的事件循环实现(libev)。 Libuv 起源于为非阻塞 IO(TCP、UDP、fs 等)创建多平台库的努力。但是,即使您不想编写多平台代码,它也提供了一个很棒的 AP​​I 来创建服务器套接字并在同一个事件循环中监听多个套接字。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多