2016-12-04 6 views
-1

ここではクライアントサーバーの処理をしています。クライアントがサーバーに接続すると、サーバーはクライアントからサーバーに接続します。文字列。 接続は確立され、クライアントは文字列を送信しますが、サーバー側ではrecv()は-1を返します。Cソケット - send()、recv()は受信していません

/* 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/manage-manage/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を使用していたはずです。

関連する問題