クライアントが特定のポートを使用して、典型的なサーバークライアントプログラムでサーバーに接続していることを確認するにはどうすればよいですか? サーバー側と同様に、bind システム コールでポート番号を使用し、その特定のポートをリッスンします。クライアント側でポート番号を指定し、同じポートを使用してサーバーに接続する方法はありますか。サーバー = 3456 、クライアント = 7834 (クライアントが接続に 7834 を使用するように、このポート番号を指定したい)。私は C および Unix プラットフォームで試しています。
4767 次
4 に答える
7
サーバー側で行うのとまったく同じように、クライアント側でこれを行います - を使用しbind()
ます。クライアントが を呼び出す代わりにconnect()
afterを呼び出すだけです。bind()
listen()
これを行うと、各マシンでクライアントのインスタンスを 1 つしか実行できないことに注意してください。また、クライアントとサーバーの間でアドレス変換を使用するネットワーク ミドルボックスがある場合、サーバーは別のクライアント ポートを参照する可能性があることに注意してください。
于 2013-08-05T03:19:37.320 に答える
4
クライアント プログラムは、sockaddr...sin_port を設定してから、接続する前に bind() を呼び出すことができます。利用可能であれば、要求された発信ポートを取得します。
サーバーは、getpeername() を呼び出してチェックすることにより、このポートが手動で設定されていることを確認できます。
ただし、他の人が言っているように、何か奇妙なことが起こっている場合や特定の要件がない限り、通常は発信ポートを設定する必要はありません。
于 2013-08-05T03:19:06.550 に答える
1
サーバー側でも同様で、通常はそうします
local_addr.sin_port = htons(INADDR_ANY);
ポート番号は重要ではないためです。代わりに、使用できます
local_addr.sin_port = htons(src_port); /Use the src_port as you like
そして、電話するbind
于 2013-08-05T03:20:25.400 に答える