嗨我新來的套接字編程C.現在我工作在聊天程序,我成功可以發送和接收消息,但問題是當客戶端請求發送用戶列表,客戶端在線和一旦服務器發送消息回到客戶端,消息成功打印當前連接的客戶端的列表,但是一旦顯示它不會退出循環。下面只是代碼的一部分。接收多個消息套接字編程C
服務器側(server.c)
pthread_mutex_lock(&list_mutex);
for(i =0; i < NotEndOfList; i++)
{
sprintf(message_replay, "Server: %s \n", usersList[i].name);
write(sock , message_replay , strlen(message_replay));
}
pthread_mutex_unlock(&list_mutex);
客戶端側(Client.c)
int i =0;
while(i < NotEndOfList)
{
if(recv(sock , server_reply , 2000 , 0) < 0)
{
puts("recv failed");
break;
}
i++;
puts(server_reply);
}
樣本輸出
User A -->:
//List
User A
User B
User C
// Loop
正確的樣本輸出
User A -->:
//List
User A
User B
User C
User A -->:
非常感謝
無法保證每次在服務器上寫入'write'的調用都會導致整個消息被客戶端中的單個'recv'讀取。您可能需要重複調用'recv'來閱讀單個消息。相反,對'recv'的單個調用可能會將來自多個調用的數據返回到'write'。你需要定義一個簡單的協議,並用它來決定在客戶端收到多少個消息 – simonc