2016-12-04 202 views
-1

因此,我在這裏做一些客戶端服務器的東西,我希望我的服務器監聽客戶端,當客戶端連接到服務器時,客戶端發送串。 連接建立,客戶端發送它的字符串,但在服務器端,recv()返回-1。C套接字 - 發送()發送,接收()不接收

/* Server */ 
int main() { 

int fd, conn_fd; 
struct sockaddr_in ad; 
int bytes; 
char recv_buffer[256]; 

fd = socket(AF_INET, SOCK_STREAM, 0); 
ad.sin_family = AF_INET; 
ad.sin_port = htons(3335); 
ad.sin_addr.s_addr = htonl(INADDR_ANY); 

bind(fd, (struct sockaddr*)&ad, sizeof(ad)); 
listen(fd, 5); 

conn_fd = accept(fd, (struct sockaddr*)0, 0); 
bytes = recv(fd, recv_buffer, sizeof(recv_buffer), 0); 
printf("%d\n", bytes); 

return 0; 

} 

客戶端只需連接到服務器: /* *客戶端/

int main() { 
    int fd, n; 
    unsigned int s; 
    struct sockaddr_in addr; 
    fd = socket(AF_INET, SOCK_STREAM, 0); 
    addr.sin_family = AF_INET; 
    addr.sin_port = htons(3335); 
    addr.sin_addr.s_addr = inet_addr("127.0.0.1"); 

    char buff[256] = "time"; 

    printf("Connecting to server....\n"); 
    if(connect(fd, (struct sockaddr*)&addr, sizeof(addr)) < 0) { 
     printf("connect() error.\n"); 
     exit(1); 
    } 

    s = send(fd, buff, sizeof(buff), 0);  

    return 0; 
} 

謝謝!

+1

當'recv'返回'-1'時,這是因爲發生錯誤。查看errno變量以獲取有關該錯誤的更多信息。 http://man7.org/linux/man-pages/man3/errno.3.html 'recv'錯誤列表在這裏列出:http://man7.org/linux/man-pages /man2/recv.2.html –

+1

如果'recv'返回-1,則調用'perror'。這會告訴你爲什麼失敗。另外,您應該在錯誤情況下調用'perror'來爲所有套接字函數添加錯誤檢查。 – dbush

+2

它可能與你沒有收到正確的套接字有關。 –

回答

-1

我發現問題是什麼。在我的服務器代碼中,我對recv()使用了錯誤的套接字描述符:而不是fd,我應該使用conn_fd。