0

Windows(c#)にtcpサーバーアプリケーションがあり、ポート3000による接続を受け入れます。Linux(ubuntu)(c ++)にtcpクライアントアプリケーションがあり、ポート3000で簡単なテキストを送信します。

私はまた、Windows上にクライアントとLinux上にサーバーを持っています、私はテキストを完全に送信するように働きます:LinuxからLinuxへWindowsからWindowsへWindowsからLinuxへ

問題は、LinuxクライアントからWindowsサーバーに送信しようとすると、Linux上のC++アプリケーションがホストが存在しないことを通知することです。

私はすでにIPアドレスをチェックしていて、それは正しいです私もホスト名でそれをやろうとしました

しかし、それは機能しません

なぜそれが起こるのか誰かが知っていますか?

これはクライアント(linux-c ++)の私のコードです:

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=gethostbyname(argv[1]);
server = gethostbyaddr((char *) &addr, 4, AF_INET);
if (server == NULL) {
    fprintf(stderr,"ERROR, no such host\n");
    exit(0);
}

私はpingを呼び出し、すべてが大丈夫です

私は自分のサーバーをWindowsで実行し、任意の接続に対してポート3000を開きます

windowsIP / windowsHostNameとポート3000(すでに別のポートを試しました)を使用してクライアント(上記のコード)を実行しようとしています

そして問題は次の行にあります:

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

サーバーがnullになるため、「ERROR、nosuchhost」と出力されます。

しかし、IPは正しいです。

Linux(c ++)上のサーバーと接続するために同じコードを使用すると、それは機能します

4

2 に答える 2

0

Virtual box のネットワークタイプを「NAT」に設定する必要があります。上記の問題は、ブリッジ アダプタにある場合に発生します。詳細な議論はここにあります: http://ubuntuforums.org/archive/index.php/t-1786307.html

于 2015-08-14T17:37:59.183 に答える
0

最も可能性の高い理由は、Windows ファイアウォールがポート 3000 への着信接続をブロックしていることです。

コントロール パネルに移動し、ファイアウォールを無効にして、もう一度テストします。これが問題である場合は、3000 ポートへの着信接続を許可するルールを追加する必要があります。また、予期しないリモート接続の問題を回避するために、許可されたホスト IP (Linux IP) をルールに含める必要があります。

Linux からサーバーの IP アドレスと 3000 ポートへの telnet 接続を試みることができます。ファイアウォールによって拒否される可能性があります。

于 2012-05-08T23:28:17.143 に答える