套接字客户端使用Select

我试图实现一个客户端function,可以使用select()函数建立与多个服务器的连接。 但我不是使用select()函数的专家。 但是,我的客户端可以启用与多个服务器的连接,但它无法从这些多个服务器读取消息。

根据我的以下示例,我将我的客户端连接到两台服务器( 192.168.100.136, 192.168.100.138) 。 与这两台服务器连接后,我的客户端只从一台服务器( 192.168.100.136 )接收消息,而不是从多台服务器接收消息。

我不确定我在示例程序中使用select()函数的方式。 请更正我的示例应用程序以获得所需的o / p ..提前致谢

 int main() { int port = 10001 ; char ip[][32] = {"192.168.100.136","192.168.100.138"}; int count = 2 ; int ret = clientSelect(ip,port,count); return 0 ; } int clientSelect(char **ipAddr ,int port , int count) { SOCKET max_sd = 0; SOCKET socketId[10] = {0}; SOCKET sd = 0 ; SOCKET client_sock[1024] = {0} ; fd_set readfds; int i ,j , ret; char recvBuf[1024] = ""; char errMsg[256] = "" ; struct sockaddr_in server ; FD_ZERO(&readfds); // Socket Initialization for(i = 0; i<count ; i++) { ret = initSocket(&socketId[i]);//Small function to create socket if (ret != 1) { return ret ; } //Server info server.sin_addr.s_addr = inet_addr(ipAddr[i]); server.sin_family = AF_INET; server.sin_port = htons(port); // Conect to server if (connect(socketId[i], (struct sockaddr *)&server , sizeof(server)) socketId[i])?max_sd:socketId[i]; } while(TRUE) { ret = select(max_sd + 1, &readfds, NULL, NULL, NULL); if (ret < 0) { printf("select failed\n "); return -1; } for ( j = 0 ; j 0 ) { printf("Message received from socket %d : %s\n",sd,recvBuf); send(sd,(char *)recvBuf,strlen(recvBuf),0); } } } } return ret ; } 

必须在每次使用之前初始化fd_set

你的代码应该是这样的:

 int clientSelect(char **ipAddr ,int port , int count) { SOCKET max_sd = 0; SOCKET socketId[10] = {0}; SOCKET sd = 0 ; fd_set readfds; int i ,j , ret; char recvBuf[1024] = ""; char errMsg[256] = "" ; struct sockaddr_in server ; // Socket Initialization for(i = 0; isocketId[i])?max_sd:socketId[i]; } ret = select(max_sd + 1, &readfds, NULL, NULL, NULL); if (ret < 0) { printf("select failed\n "); return -1; } // warning: you don't know the max_sd value for(i = 0; i 0 ) { printf("Message received from socket %d : %s\n",sd,recvBuf); send(sd,(char *)recvBuf,strlen(recvBuf),0); } } } } return ret ; }