我是C套接字编程的新手。我知道如何编写TCP和UDP作为不同的程序。 但是只有一台服务器应该处理两个客户端。
有谁能告诉我如何编写一个处理TCP和UDP客户端的服务器?
答案 0 :(得分:0)
您无法使用1个服务器套接字侦听TCP和UDP客户端。但是,您可以创建2个服务器套接字(一个TCP服务器和一个UDP服务器)。注意,两个服务器都没有意义:UDP是无连接的,所以当你尝试在服务器套接字上执行accept
时会出现第一个问题(因为它是一个假设的混合版本,应该是{{ 1}}做什么?)。
无论如何,我假设您想在同一个事件循环中使用两台服务器(如果您不知道它是什么,那么您可以将它视为主要功能)。由于C套接字默认是阻塞的,因此您无法立即运行两个服务器。
您可以使用accept
(Google it)。如果你不知道它是什么,我建议先用Python试一下。在Python中它是相当直接的,它将为您提供一些概念的洞察力。基本上你要做的是:在这些套接字之间创建多个服务器套接字而不是“切换”,看看哪些套接字有读取事件(无论是新连接还是消息),然后处理这些事件。
我可以推荐libuv。它是一个最初为Node.js构建的C库。在libuv之前,他们使用了与平台相关的事件循环实现(libev)。 Libuv起源于为非阻塞IO(TCP,UDP,fs等)创建多平台库。但是,即使您不想编写多平台代码,它也会提供一个很棒的API来创建服务器套接字并在同一个事件循环中监听多个套接字。