0

C++ コンソール アプリケーションにクライアント サーバー プログラムがあります。最初にサーバーを実行してから、クライアントを実行します。サーバーは、接続されているクライアントからのIPアドレスを表示する必要がありますが、0.0.0.0と表示されます

問題を引き起こしているのはこの行だと思います

getsockname(ListeningSocket, (SOCKADDR *)&ServerAddr, (int *)sizeof(ServerAddr));
printf("Server: Receiving IP(s) from client: %s\n", inet_ntoa(ServerAddr.sin_addr)); 

クライアントで、IPアドレスを127.0.0.1に設定しました

 ServerAddr.sin_addr.s_addr = inet_addr("127.0.0.1"); 
4

1 に答える 1

1

sockaddr指定されたtoでクライアント アドレスを取得しますaccept。後で接続されたクライアントのソケット アドレスが必要な場合は、使用する必要がありますgetpeername( not getsockname )。

また、有効で初期化された変数を長さとしてgetpeername(またはgetsockname)に渡す必要があります。

int size = sizeof(SOCKADDR_IN);
getpeername(connectedsocket, (SOCKADDR*) &address, &size);

あなたが今していることは、サーバーソケットのローカルアドレスを取得しようとしていますが、それを間違って呼び出しています.

于 2013-03-11T09:40:53.907 に答える