2012-05-09 9 views
-5

可能性の重複:
Connection from linux to windows via tcp(のlinux/C++での)Conecting TCPクライアント

私は窓/ C#と別のものにTCPクライアントを持っていますon linux/C++ また、私は両方にTCPサーバーを持っています。窓/ C#はOK働く上

マイTCPクライアント、問題は、Linux/C++

にTCPクライアントである私は、Linux上でTCPサーバーに接続するとき/それは完璧に動作++、しかし、私はに接続しようとすると、cはWindowsのTCPサーバー/ C#は接続しませんが、pingは正常です。

これは失敗したコードの一部である:

int sockfd, portno, n; 
struct sockaddr_in serv_addr; 
struct hostent *server; 
struct in_addr addr={0}; 
char buffer[256]; 
if (argc < 3) { 
    fprintf(stderr,"usage %s hostname port\n", argv[0]); 
    exit(0); 
} 
portno = atoi(argv[2]); 
sockfd = socket(AF_INET, SOCK_STREAM, 0); 
if (sockfd < 0) 
    error("ERROR opening socket"); 
addr.s_addr=inet_addr(argv[1]); 
server = gethostbyaddr((char *) &addr, 6, AF_INET); 
if (server == NULL) { 
    fprintf(stderr,"ERROR, no such host\n"); 
    exit(0); 

問題がラインである:

server = gethostbyaddr((char *) &addr, 6, AF_INET); 

それは "ERROR、そのようなホスト" を印刷するので、それは、nullが返さ

すべての組み合わせを試しました。

-TCPクライアント(Linux)からTCPサーバー(Linux)

-TCPクライアント(Linux)のTCPサーバー(Windowsの場合)へのTCPサーバーへ

-TCPクライアント(Windowsの場合)(Linux)のTCPサーバーへ

-TCPクライアント(窓)(ウィンドウ)

すべてがを除いて動作します:TCPサーバーへのTCPクライアント(Linux)の(窓)

私はまた TCPサーバ(Windowsの場合)には(Linux上で付属)TCPクライアントのnetcatを試してみましたが、それが動作します。

私は両方のWindowsからLinuxへともLinuxからの窓へのpingと呼ばれてきた、そしてそれは100%をrecieves

私のTCPクライアント(Linuxは)(TCPサーバーへのLinuxに接続していない理由を私は知りません)

+1

TCP接続を行い、IPアドレス、なぜ逆のDNSルックアップを実行する必要がありますか? – dtb

+0

what ???、私は理解できませんでした...逆のDNSルックアップは何ですか? –

+1

あなたは 'gethostbyaddr'を呼び出します。どうして? – dtb

答えて

0

gethostbyaddr()が特定のアドレスのホスト名を判別するためには、DNSなどの何らかの名前サービスが必要です。あなたがWindowsをLinuxにしているとき、これは明らかに問題があります。一般的に、私はこのようにホスト名を解決することで多くの信頼性の問題を抱えており、使用しないことを提案しています。 DTBが指摘したように、接続にはIPアドレスだけが必要です。何らかの理由でホスト名が必要な場合は、最も安全なことは、クライアントが最初に接続するときにサーバーにクライアントのホスト名を送信させることです(またはその逆)

関連する問題