2016-09-30 11 views
0

TCP/IP接続を確立しています。2台のコンピュータ間でTCP/IPが動作しない

server.c

#include <sys/socket.h> 
#include <netinet/in.h> 
#include <arpa/inet.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include <unistd.h> 
#include <errno.h> 
#include <string.h> 
#include <sys/types.h> 
#include <fcntl.h> 

int main(){ 
    int sock, n = 0; 
    char msgsend[512], msgrecv[512]; 
    struct sockaddr_in server; 


    memset(&server, 0, sizeof(server)); 
    memset(msgrecv, 0, sizeof(msgrecv)); 

    sock = socket(AF_INET, SOCK_STREAM, 0); 
    if(sock == -1){ 
    printf("Could not create a socket!\n"); 
    return -1; 
    } 

    server.sin_family = AF_INET; 
    server.sin_addr.s_addr = inet_addr("192.168.112.130"); 
    server.sin_port = htons(5000); 


    printf(" Trying to connect...\n"); 

    if(connect(sock, (struct sockaddr*)&server, sizeof(server)) < 0){ 
    printf("Error:Connection failed\n"); 
    return -1; 
    } 
    printf("Connected\n"); 
    while(1){ 
    printf("please enter your reply\n"); 
    gets(msgsend); 

    send(sock, msgsend, sizeof(msgsend) - 1, 0); 
    n = recv(sock, msgrecv, sizeof(msgrecv) - 1, 0); 

    if(n < 0){ 
     printf("Read error\n"); 
    } 
    printf("\n"); 
    printf("server says:"); 
    msgrecv[n] = 0; 
    fputs(msgrecv, stdout); 
    printf("\n"); 
    } 
    return 0; 
} 

は、私が最初に./serverを実行し、別の端末で./client

#include <sys/socket.h> 
#include <netinet/in.h> 
#include <arpa/inet.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include <unistd.h> 
#include <errno.h> 
#include <string.h> 
#include <sys/types.h> 
#include<fcntl.h> 

int main(){ 
    int serverid, clientid, n = 0, len; 
    char msgsend[512], msgrecv[512]; 
    struct sockaddr_in server,client; 

    serverid = socket(AF_INET, SOCK_STREAM, 0); 
    if (serverid < 0) { 
    puts("Error creating socket\n"); 
    return -1; 
    } 

    memset(&server, 0, sizeof(server)); 
    memset(msgrecv, 0, sizeof(msgrecv)); 

    server.sin_family = AF_INET; 
    server.sin_addr.s_addr = htonl(INADDR_ANY); 
    server.sin_port = htons(5000); 

    if(bind(serverid, (struct sockaddr*)&server, sizeof(server)) < 0) { 
    printf("Error binding\n"); 
    return -1; 
    } 

    if(listen(serverid, 10) < 0){ 
    printf("ERROR"); 
    return -1; 
    } 
    len = sizeof(client); 
    clientid = accept(serverid, (struct sockaddr*)&client, &len); 
    if (clientid < 0) { 
    printf("Connection error\n"); 
    return -1; 
    } 
    puts("Connected to client"); 

    while(1){ 
    n = recv(clientid, msgrecv, sizeof(msgrecv) - 1, 0); 
    if(n < 0){ 
     printf("Error while reading...\n"); 
     return -1; 
    } 

    printf("client says:\n"); 
    msgrecv[n] = 0; 
    fputs(msgrecv, stdout); 
    printf("\n"); 
    printf("enter your reply\n"); 
    gets(msgsend); 
    send(clientid, msgsend, sizeof(msgsend) - 1, 0); 
    printf("\n"); 
    } 
    return 0; 
} 

いるclient.c:私はこれらのコードを持っています。私は同じコンピュータを使用する場合、それは正常に動作しますが、私は別のコンピュータとクライアント上のサーバーを使用する場合は決して接続します。 私は何が間違っているのか分かりません。多分私は別のIPを使用する必要がありますか?外国のコンピュータでは、コードの一部が異なる必要がありますか?

注:1台のコンピュータはイーサネット搭載のデスクトップで、もう1台はWiFiで同じルータに接続されたラップトップです。

+0

コンピュータ上のOSとは何ですか?ウィンドウの場合は、ファイアウォールを無効にしてください。linuxの場合は、iptables上のそのポートを有効にしてください。サーバーとクライアントは同じマシン上で正常に動作するため、問題はおそらく別の場所にあります。 –

答えて

0

この種のものをデバッグする一般的な方法は、両方向でpingを試み、それが動作するかどうかを確認することです。そうでない場合は、ルーティングテーブルの設定と、デバイスのインターフェイス、ルータの転送/ファイアウォール/ NAT設定を確認する必要があります。後で両方向のpingが有効であることを確認します。

それは仕事、あなたには、いくつかのncのような単純なプログラムあるいはあなた自身のサーバーにTCPを使用できるかどうかのテストを行います。 pingが動作してもTCP接続がそうでない場合は、関係するホストの1つ、たいていの場合はサーバー上でファイアウォール設定になる可能性があります。設定を調整し、再度テストしてください。あなたがあなた自身のアプリケーションが動作するかどうかわからない場合、あなたはおそらく、接続をテストするには、この時点でncを使用して、あなたは今、あなたのアプリケーションのテストを続行することができます。

関連する問題