UDP を使用してトランジットするための単純な送信側と受信側のプログラムを作成しているため、コネクションレスですが、受信側のプログラムが bind() またはサーバー、および/またはその両方を呼び出す必要があるかどうかを判断するのに問題があります。私の受信プログラム(クライアント)は、送信者(サーバー)からデータを受信するのを待っている無限ループに座ってから、データを出力します。アドレス/ポートを特定のソケットに関連付ける以外に、 bind() が正確に何をするのかよくわかりません。bind() を呼び出す必要があるのはなぜですか?
3 に答える
bind(2)
OS がネットワーク パケットのルーティング先のアプリケーションを認識できるように、呼び出す必要があります。特定のプロトコル (TCP や UDP など) の特定のポートを使用して呼び出す場合bind
、「ポート XXXXX でネットワーク パケットを見つけたら、それを渡してください」と尋ねていることになります。
たとえば、プログラムの 2 つのコピーが実行されていて、両方が同じポートで UDP パケットをリッスンしたいとします。両方が同じポートで呼び出す場合bind
、OS は各ポートに誰がバインドされているかを調停できるため、一方は成功し、もう一方は失敗します。次に、そのポートで受信したパケットは、そのポートへのバインドに成功したプログラムのインスタンスに渡されます。
ネットワークアプリケーションを開発するときは、Bind に「アドレスとポート」を指定する必要があります。これを Localhost に設定する場合、アプリケーションはネットワーク全体と通信できず、通信しているシステムに対してのみ..ネットワークアドレスで設定すると、ローカルホストとして通信できません。ネットワークとのみ通信し、0に設定すると、ローカルホストとネットワークの両方として使用できます。
ソケットを固定アドレスまたは/またはポートにしたい場合は、bind を使用します。