1

3 台の異なるコンピューターに 3 つのプロセスがあります。

クライアントであるプロセス 1 は、プロセス 2 にプロセス 3 の IP とポートを要求します。

プロセス 3 は以前にプロセス 2 に接続され、プロセス 2 はファイル記述子からプロセス 3 の IP を取得します (プロセス 3 はプロセス 2 の IP とポートを既に認識しています)。

これは問題なく動作しますが、プロセス 2 とプロセス 3 を同じコンピューターで実行しようとすると、プロセス 3 の IP は常に 127.0.0.1 であるため、プロセス 1 はプロセス 3 を見つけられません。

    socklen_t len;
    struct sockaddr_storage addr;
    char ipstr[INET_ADDRSTRLEN];

    len = sizeof addr;
    getpeername(fd, (struct sockaddr*) &addr, &len);

    struct sockaddr_in *s = (struct sockaddr_in *) &addr;

    inet_ntop(AF_INET, &s->sin_addr, ipstr, sizeof ipstr);

これは私が使用しているコードで、ipstrは取得した IP です。

どうすればこれを解決できますか?

どうもありがとう!

4

3 に答える 3

0

プロセス 2 がプロセス 3 に接続する方法がわかりません。

int connect (int sockfd,struct sockaddr * serv_addr,int addrlen);

connect関数の *serv_addr* 引数が localhost の場合、プロセスgetpeernameは localhost を取得します。*serv_addr* が PC の IP の場合、PC の IP を取得できます。

于 2013-07-11T01:16:34.323 に答える