2012-01-03 3 views
1

私はSockingプログラミングAPIを使用してクライアント/サーバーアプリケーションを作成しています。を使用すると、使用するポート番号を知ることはできますか?

connect()を呼び出す前に、クライアント側で使用するポート番号を知ることはできますか? 私が今持っているのは、ソケットファイル記述子がsocket()を呼び出すことです。私はgetsocknameを使用しようとしましたが、ポート番号には0しかありませんでした。

+0

どのソケットに接続しているのか、どのソケットを書き出すのかを意味していますか? – dbeer

答えて

0

ポート番号0でも、bind()を明示的に呼び出すことができます。その後、getsockname()はあなたにポートを与えるはずです。

2

bind(2)(ポート= 0および/またはaddr = 0)を呼び出すまで、アドレス/ポートは割り当てられません。バインド後、getsocknameを使用できます。

+0

もちろん、前に明示的に呼び出されていなければ 'connect'は' bind'を意味します。 –

2

ソケットプログラミングを初めてお使いの場合は、Beej's Guide to Network Programmingを読むことを強くお勧めします。

しかし、TCPソケットで質問に答えるには、どのリモートポートに接続しているかを知る必要があります(つまり、サーバーがbind()を実行しています)。しかし、通常は(クライアント・アプリケーション・プログラマー)は、サーバーがトークバックに使用するポートを指定しません。これは、クライアントが使用可能なポート番号に基づいてTCPスタックによってランダムに選択されます。

+0

クライアント側でランダムに選択されたポートは、通常、「エフェメラルポート」として知られています。 @ VictorT。 – greatwolf

+0

これは今正確だと言いますか? –

+0

問題があります。 bind()を使うと、ポート番号を正しく取得できます。しかし、私は正しいIPアドレスを取得することができません。 – flyingbin

関連する問題