2017-08-07 24 views
-2

実行後、クライアントにファイル名を入力しますが、サーバー側では印刷されません。すべてを試しました。助けてください。私はWindowsでbashを使用しています。私はちょうどクライアントからサーバーにファイル名を送信しています。サーバー側にクライアントが表示されます。メッセージは送信しません:Cソケット

これは私のいるclient.c

#include<stdio.h> 
#include<sys/socket.h> 
#include<sys/types.h> 
#include<string.h> 
#include<netinet/in.h> 
#include<stdlib.h> 
#include<unistd.h> 
    int main() 
    { 
    int i,size,connect_status,sd; 
    char sentmsg[100],recvmsg[100]; 
    int sentlen,sent_status,recvlen,recvbytes; 
    struct sockaddr_in client,address; 
    sd = socket(AF_INET,SOCK_STREAM,0); 
    if(sd == -1) 
    { 
      perror("Socket Error : "); 
      return 0; 
    } 

    client.sin_family = AF_INET; 
    client.sin_port = htons(1543); 
    client.sin_addr.s_addr = INADDR_ANY; 
    for(i=0; i<8;i++) 
    { 
      client.sin_zero[i] = '\0'; 
    } 
    connect_status = connect(sd,(struct sockaddr*)&client,sizeof(struct sockaddr)); 
    if(connect_status == -1) 
    { 
      perror("Connect Error : "); 
      return 0; 
    } 
    printf("\nEnter the file name to be read : "); 
    scanf("%s",sentmsg); 
    sent_status = send(sd,sentmsg,100,0); 
    if(sent_status == -1) 
    { 
      perror("Sending Error : "); 
      return 0; 
    } 

    return 0; 
    } 

ですこれは、私がクライアントからサーバにメッセージを送信するunabble午前私のserver.c

#include<stdio.h> 
#include<sys/socket.h> 
#include<sys/types.h> 
#include<string.h> 
#include<netinet/in.h> 
#include<stdlib.h> 
#include<unistd.h> 
#include<fcntl.h> 
#include<sys/stat.h> 
int main() 
{ 
    int i,newsd,sd,size,listen_status,bind_status,fd; 
    char sentmsg[100],recvmsg[100]; 
    int sent_status,rec_status,sentlen,recvlen; 
    struct sockaddr_in server,address; 
    sd = socket(AF_INET,SOCK_STREAM,0); 
    if(sd == -1) 
    { 
      perror("Socket Error : "); 
      return 0; 
    } 
    server.sin_family = AF_INET; 
    server.sin_port = htons(1534); 
    server.sin_addr.s_addr = INADDR_ANY; 
    for(i=0 ; i<8 ; i++) 
    { 
      server.sin_zero[i] = '\0'; 
    } 
    bind_status = bind(sd,(struct sockaddr*)&server,sizeof(struct sockaddr)); 
    if(bind_status == -1) 
    { 
      perror("\nBind Error : "); 
      return 0; 
    } 
    listen_status = listen(sd,5); 
    if(listen_status == -1) 
    { 
      perror("\nListen Error : "); 
      return 0; 
    } 
    size = sizeof(struct sockaddr_in); 
    newsd = accept(sd,(struct sockaddr*)&address,&size); 
    if(newsd == -1) 
      { 
      perror("\nAccept Error : "); 
      return 0; 
    } 
    rec_status = recv(newsd,recvmsg,recvlen,0); 
    if(rec_status == -1) 
    { 
      perror("\nRecieve Error : "); 
      return 0; 
    } 
    recvmsg[rec_status] = '\0'; 
    printf("\nClient : %s",recvmsg); 
    return 0; 
} 

です。助けてください

+0

の接続は、サーバーが積極的に接続要求を拒否されたことを意味します。ポートはアクセス可能ですが、サーバープロセスがバインドされていません。 –

+0

どうすればいいですか? –

+2

私はCでのネットワーク通信について何も知らないが、それはよくあるエラーです。あなたはクライアント 'client.sin_port = htons(1543);で定義しましたが、サーバでは' server.sin_port = htons(1534);です。これは正しいと思われますか?またはそれらは同じポートであるべきですか? –

答えて

0

recvlenを初期化していないためです。 は、受信バッファの長さに設定し、それが動作します:拒否

recvlen = 100; 
rec_status = recv(newsd,recvmsg,recvlen,0); 
関連する問題