重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

開発言語:C
soccket(AF_INET, SOCK_DGRAM, 0)での通信時

サーバ側ではrecv()を行なうためにはbind()しますが、
クライアント側では、send()を行なうために明示的にbind()を行なわずにプログラムが動作しています。

この動作理由を教えて頂けませんか。

また、クライアント側において送受信を行なう場合にはsend()を呼び出した後に、
recv()を呼び出す場合にはbind()を必要としないプログラムを見た事あるのですが、
その動作理由が分かりません。

これについても合わせて教えて頂けると助かります。

よろしくお願いします。

A 回答 (2件)

サーバでbind()を行うのは、サーバが接続を待ち受ける窓口(ポート)を指定するためです。

サーバの窓口はクライアントからのアクセスをOSがサーバ・プロセスに振り分けるために指定しておかないといけません。幾つものサーバ・プロセスが同じ窓口で待つことはできないのです。
クライアント側はサーバの窓口に向けてconnect()で接続しにいきます。
読み(recv)書き(send)のどちらを行うかには関係ありません。
    • good
    • 0
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!