我可以使用单个websocket服务器同时打开2个端口

我是websocket编程的新手。 目前我正在使用一个简单的websocket服务器,使用c,可以响应websocket客户端。 我设法在一个端口上使用1个客户端和1个服务器。 我想知道我是否可以打开2个端口,因此不同的客户端可以连接到不同的端口。

#include  #include  #include  #include  #include  #include  #include  #include  #include  #include  int main(int argc, char *argv[]) { int listenfd = 0, connfd = 0; struct sockaddr_in serv_addr; char sendBuff[1025]; listenfd = socket(AF_INET, SOCK_STREAM, 0); memset(&serv_addr, '0', sizeof(serv_addr)); memset(sendBuff, '0', sizeof(sendBuff)); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = htonl(INADDR_ANY ); serv_addr.sin_port = htons(8000); bind(listenfd, (struct sockaddr*) &serv_addr, sizeof(serv_addr)); listen(listenfd, 10); while (1) { connfd = accept(listenfd, (struct sockaddr*) NULL, NULL ); close(connfd); sleep(1); } } 

如果你想要1个服务器的多个客户端,你需要使用线程,你需要监听,然后当你接受客户端时,创建一个线程并让他管理请求,并让主线程回到监听。 不同的端口有点困难,因为客户端需要连接到特定的端口,所以你怎么知道要连接到哪个端口,并且认为你想要一个未定义数量的客户端,或者你如何管理哪些端口是免费的,并通信它与客户端(而不是在端口范围内逐个迭代)。

我不记得C p_thread lib,但那将是一个开始。

是的,您可以这样做,但您必须为不同的端口创建不同的线程。 可能难以实施。

请参阅此链接以获取更多解决方案

了解套接字的工作原理 。

接受的是在连接客户端和服务器之间创建连接,此连接采用新套接字的forms。 所以,你有一个套接字监听连接,当一个进来时,它将返回一个新的套接字,让客户端与服务器通信。 初始套接字将继续坐在那里,监听进一步的新连接。

该链接提供了一组关于它们如何挂在一起的良好信息。

然而,websockets并不是真的那样 – 他们使用服务器端的单个端口(通常是端口80)从连接读取数据,客户端不创建新的套接字,它重用现有的连接通道它与服务器的现有连接(你没有’创建’websocket,你将HTTP连接升级到持久的TCP websocket),然后自己处理读取的数据作为单个套接字上的消息流 – 不是每个客户端的套接字。 它是一种基于消息的抽象,与TCP基于流的抽象不同 。

是的,尝试将侦听器添加到同一服务器脚本上的不同端口。