我想使用TCP IP将2个客户端连接到同一服务器端口。我在绑定之前使用下面的代码: - //重用已绑定的套接字
int reuse=1;
setsockopt(m_iSocketId, SOL_SOCKET, SO_REUSEADDR, (char *)&reuse, sizeof(reuse))
答案 0 :(得分:2)
listen(iSocketId, 2);
struct sockaddr clientAddr;
socklen_t length = sizeof(clientAddr);
int firstClientSocket = accept(iSocketId, &clientAddr, &length);
length = sizeof(clientAddr);
int secondClientSocket = accept(iSocketId, &clientAddr, &length);
在此代码之后,您将有两个客户端套接字可供使用。请注意,在某些客户端连接之前,“接受”功能会阻塞。通常,您应该使用一些异步方法(例如select)来处理多个客户端。
SO_REUSEADDR通常不适合您的用途。它只是告诉系统监听端口可以被服务器的多个实例重用。当您的应用程序在退出时未正确关闭套接字时,它适用于调试。否则系统可能会保留端口一段时间,拒绝将另一个套接字绑定到它。
不要忘记listen和accept calls上的错误处理=)
答案 1 :(得分:0)
您不需要为此设置SO_REUSEADDR
。你不需要做任何特别的事情。只需根据需要在客户端中创建和连接任意数量的套接字,并继续在服务器中调用accept()
。