我使用udp socket編寫服務器。客戶端發送第一條消息進行連接後,我打開新的套接字與此套接字上的此客戶端進行通信(第一個套接字用於偵聽),併爲每個客戶端創建一個線程。但是在線程中,while循環變得無限,因爲儘管任何客戶端都發送數據,但recvfrom每次都會接收數據。我的代碼中有什麼問題?recvfrom無限接收問題
下面的代碼示例:
int main()
{
.....
// creating socket
if((sock = socket(AF_INET, SOCK_DGRAM, 0)) == -1)
{
perror("Socket cannot be created\n");
return FAILURE;
}
.....
for(; ;)
{
// TAKE CLIENTS INFORMATION
/**************************************/
recvfrom(sock, &client, sizeof(Client), MSG_WAITALL, (struct sockaddr *)&clientAddr, &size); //1
.......
if((sock2 = socket(AF_INET, SOCK_DGRAM, 0)) == -1)
{
perror("Socket cannot be created\n");
return FAILURE;
}
client.sock = sock2;
...
pthread_create(thid+num_client-1, NULL, messanger, (void*)(clients + num_client-1));
} // end of for loop
}// end of main
// thread function
void *messanger(void *argClient)
{
Client client = *(Client*)argClient;
...
while(strcmp(message.buffer, "exit") != 0)
{
recvfrom(client.sock, &message, sizeof(Message), MSG_WAITALL, (struct sockaddr *)&clientAddr, &size);
printf("%s\n", message.buffer);
}// this file loops infinetely altough client does not send data. Printf prints onln new line
}
hmm。我會試試這個。我也不滿意我的解決方案。但在tcp服務器中,從accept返回的fd號碼更容易工作。所以我可以與這個FD號碼上的特定客戶進行通信。 ©試圖以這種方式假裝,但我看到它不是這樣。謝謝你的答案 – cemal 2010-11-19 14:27:22