我正在FreeBSD c中编写基本服务器和客户端聊天应用程序。基本上多个客户端连接到多个端口上的服务器(例如端口4,5,6,7),这些端口存储在一个阵列中,该阵列通过查找相应客户端发送的数据不断迭代。我使用recv(端口号,缓冲区,sizeof(缓冲区),MSG_DONTWAIT),以支持非阻塞端口。当我使用带阻塞的read()方法时,此方法有效,但当我使用带有非阻塞的recv方法时,它不起作用,更具体地说,它将从数组中的第一个端口接收数据,但不接收其他数据。从逻辑上讲,我认为我的代码有效,我只是在寻找有关recv可能出现的问题的任何见解,或者是否有人知道如何解决这个问题。
void* chat_room(int chatid){
printf("Entered Chatroom %d\n", chatid);
int i = 0;
int n;
char buffer[150];
while(1){
int *array = create_chat_array(chatid);
while(new_chatter != chatid){
i = 0;
while(array[i] != -1){
n = recv(array[i], buffer, sizeof(buffer), MSG_DONTWAIT);
if(n > 0){
printf("Recieved %s, from %d\n", buffer, array[i]);
}
i++;
}
}
}
}
这是聊天室的代码,基本上它遍历数组并尝试读取。它总是从数组[0]读取,但不从任何其他数据读取。任何见解都会有所帮助