サーバには複数のインタフェースがあります。サーバーは0.0.0.0にバインドされています。つまり、サーバーはすべてのインターフェイスで待機しています。したがって、クライアントはこれらのサーバーIPのいずれかを使用して接続できます。 したがって、サーバー側では、クライアントが接続されているIPを取得する方法。サーバ側では、クライアントが接続されているサーバIPを取得します。
答えて
accept()
によって返されたソケットにgetsockname()
を使用すると、サーバーが受け入れたクライアントと通信するために使用しているローカルアドレスにバインドされます。
NAME
getsockname — get socket name
LIBRARY
Standard C Library (libc, -lc)
SYNOPSIS
#include <sys/types.h>
#include <sys/socket.h>
int
getsockname(int s, struct sockaddr * restrict name,
socklen_t * restrict namelen);
DESCRIPTION
The getsockname() system call returns the current name for the specified
socket. The namelen argument should be initialized to indicate the
amount of space pointed to by name. On return it contains the actual
size of the name returned (in bytes).
*クライアント*がこのサーバと通信するために使用しているアドレスを返します* – EJP
@EJP:いいえ、あなたは間違っています**サーバ側では** getsocknameは私が書いたようにサーバアドレスを返します。クライアントのアドレスを返すgetpeernameです。私はあなたが私の答え(getsockname)に-1を投票し、その直後に同じ答え(getsockname)を与えることを理解していません!公正ではない、あなたがSOと一緒に働いている方法。 –
サーバでは、 'getsockname()'はクライアントがサーバへの接続に使用したアドレスを返します。これはサーバのIPアドレスのいずれかになります。ここに矛盾はありません。 'サーバがクライアントと通信するために使用している'クライアントの*独自のアドレスは、サーバ上で 'getpeername()'によって返されます。 – EJP
この情報は、getsockname()
コールで入手できます。サーバー側で呼び出されると、クライアントがサーバーを起動するローカルサーバーアドレスが提供されます(accept
)。
注意(何を考えますプロキシ/ルーターがクライアントとサーバーの間にある場合に発生します)。その場合、実際にクライアントが実際のIPにすることはできません(クライアントがデータパケットでサーバに送信しない限り)。クライアント上のIPだけが受け入れられます。
@downvoter自分自身を育てないでください。調べる。それのすべて。ここにエラーはありません。 – EJP
- 1. PPP接続のサーバIPを取得する方法
- 2. SignalR - ネゴシエーションリクエスト中にサーバ側の接続IDを取得する
- 3. サーバにFirebirdクライアントを接続
- 4. クライアントからサーバへの接続が拒否されました
- 5. サーバ上の接続されたクライアントのIPアドレスを確認する
- 6. サーバとクライアント間の接続
- 7. QtクライアントとPHPサーバ接続
- 8. マルチクライアントが同じIPを介してサーバに接続する
- 9. ゴラン・リフト・サーバでクライアントのIPを取得する方法
- 10. Qtでサーバに接続されているクライアントの数を知るには
- 11. クライアントはサーバに接続しますが、それはそれです
- 12. Railsを使ってクライアントIPとサーバIPを取得する方法
- 13. C#サーバに接続するJavaクライアントSSL
- 14. クライアントからサーバに接続されたクライアントのC
- 15. サーバに接続されているすべてのIPのリストSSH
- 16. Node.jsをクライアントとしてCommon Lispサーバに接続します
- 17. UDPサーバとUDPクライアントの違い:sock.bind((host、port))はクライアント側かサーバ側か?
- 18. 単純なクライアントとサーバを接続しているバークレーソケット
- 19. NETCAT TCPサーバ/クライアント接続が開いていない
- 20. Solrが別の外部サーバIPに接続しようとしています
- 21. Androidデバイスがmysqlサーバに接続されています
- 22. 携帯型PosgreSQLサーバにクライアントを接続
- 23. TLS 1.2を使用してTCPサーバにクライアントを接続する
- 24. サーバ側から既知のMACアドレスからIPアドレスを取得
- 25. SSE接続が確立された直後にSignalRサーバがUnityクライアントへの接続を終了しました
- 26. CantクライアントからMongoDBサーバに接続
- 27. クライアントとMySQLサーバの接続に成功
- 28. 適切なFIFOクライアント - サーバ接続
- 29. WebRTC、1対1(クライアント/サーバ)接続用の偽ICEサーバ
- 30. サーバ/クライアントのIPが変更された場合にtcp接続を再開する方法
@UlugToprak、私はSERVERのIPを要求し、クライアントのIPは要求しません。 – user2137306
言葉がはっきりしていない、重複フラグを削除しました。 –