これが以前に尋ねられたのを見たことがありますが、うまくいく答えは見つかりませんでした。その情報を他のクライアントに転送するために、サーバーが接続されているコンピューターの明示的な IP アドレス (つまり、123.456.789.100) とポート番号を取得する必要があります。Windows 7 (Home Premium)、Visual Studio 2010 Professional で WinSock2.h を使用して、「C++ コンソール アプリケーション」を作成しています。これは TCP 接続です。これまでの私のコードは次のとおりです。
sockaddr_in* addr = new sockaddr_in;
int addrsize = sizeof(addr);
getsockname(clientSock, (sockaddr*)addr, &addrsize);
char* ip = inet_ntoa(addr->sin_addr);
int port = addr->sin_port;
printf("IP: %s ... PORT:%d\n", ip, port);
これにより、常に IP に 205.205.205.205、PORT に 52685 が毎回返されます。gethostbyname などの代替手段を試しましたが、これは機能しますが、実際の IP 自体が必要です。getsockname() の代わりに getpeername() も試しましたが、結果は同じでした。私はルーターの背後にいますが、これまで同じマシンでサーバーとクライアントの両方を使用しています。
事前にすべての助けに感謝します!