C语言中的客户机/服务器程序

C语言中的客户机/服务器程序,c,sockets,client-server,C,Sockets,Client Server,我是C套接字编程新手。我知道如何将TCP和UDP作为不同的程序编写。 但是只有一台服务器可以处理这两个客户端 有谁能告诉我如何编写一个同时处理TCP和UDP客户端的服务器吗?您不能使用一个服务器套接字侦听TCP和UDP客户端。但是,您可以创建2个服务器套接字(一个TCP服务器和一个UDP服务器)。请注意,两个都有一个服务器是没有意义的:UDP是无连接的,因此当您尝试在服务器套接字上执行accept时,会出现第一个问题(因为它是一个假设的混合版本,那么accept应该做什么?) 无论如何,我假设您

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


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

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

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

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


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

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