[英]Server doesn't read message from client
我正在嘗試實現一個簡單的多線程客戶端/服務器程序:客戶端向服務器發送一個數字,服務器創建一個線程,該線程發送回數字+1。
問題如下:客戶端沒有問題地連接到服務器; (據我所知)線程是沒有問題的; 但是在客戶端將數字寫入套接字后,服務器根本看不到它。 對read()的調用沒有任何錯誤,它只是坐在那里,一直等待。
我嘗試通過它發送多個整數。 沒有不同。 我懷疑是文件描述符服務器端被錯誤地傳遞給線程,但是我不知道怎么辦。 我的另一個懷疑是,我缺少了一個顯而易見的東西。
無論哪種方式,幫助都是值得的。 有任何想法嗎?
服務器端:創建線程的循環。
while (1) {
int client;
printf("[server]Waiting at port %d...\n", PORT);
fflush(stdout);
int length = sizeof(from);
if (client = accept(sd, (struct sockaddr*)&from, &length) < 0) {
perror("[server]Error: accept().");
continue;
}
pthread_t th_id;
pthread_create(&th_id, NULL, &treat, &client);
}
服務器端:線程的處理功能(問題在這里)。
void* treat(void* client)
{
printf("[thread]Waiting for message...\n");
fflush(stdout);
pthread_detach(pthread_self());
int client_sd = *((int*)client);
int nr;
if (read(client_sd, &nr, sizeof(int))) {
perror("[thread]Error: read().");
exit(-1);
}
// The program won't reach this point.
printf("[thread]Read: %d", nr);
fflush(stdout);
close(*((int*)client));
return (NULL);
}
客戶端:
if (connect (sd, (struct sockaddr *) &server,sizeof (struct sockaddr)) == -1)
{
perror ("[client]Error: connect().\n");
return errno;
}
printf ("[client]Write a number: ");
fflush (stdout);
scanf("%d",&nr);
printf("[client] Read %d\n",nr);
if (write (sd,&nr,sizeof(int)) <= 0)
{
perror ("[client]Error: write()\n");
return errno;
}
//the program reaches here.
printf("[client]The message was sent\n");
問題出在線上
if (client = accept(sd, (struct sockaddr*)&from, &length) < 0) {
它被解釋為
if (client = (accept(sd, (struct sockaddr*)&from, &length) < 0)) {
如果accept
返回正數,則client
設置為0
。 然后從stdin中讀取線程中的后續讀取。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.