4

クライアントが特定のポートを使用して、典型的なサーバークライアントプログラムでサーバーに接続していることを確認するにはどうすればよいですか? サーバー側と同様に、bind システム コールでポート番号を使用し、その特定のポートをリッスンします。クライアント側でポート番号を指定し、同じポートを使用してサーバーに接続する方法はありますか。サーバー = 3456 、クライアント = 7834 (クライアントが接続に 7834 を使用するように、このポート番号を指定したい)。私は C および Unix プラットフォームで試しています。

4

4 に答える 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 に答える