• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:UDPのソケットプログラミング)

UDPのソケットプログラミングとは?

このQ&Aのポイント
  • UDPのソケットプログラミングとは、ソケットを使用してUDP通信を行うプログラミングのことです。
  • UDPクライアントがbind()せずにsendto()を行った場合、サーバ側でクライアントのIPアドレスとポート番号を受け取ることができます。
  • クライアントが送信したポート番号を知る方法はありませんが、クライアントのアドレスと他のクライアントが使用していないポート番号が取得できます。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

No.1 です。 回答が遅くなってしまったことをお詫びします。 connect() や bind() なしで sendto() を呼び出した場合は、sendto() の 処理が実行される時点でソケットと任意のポートの結びつけが行われます。 従って、sendto() を呼び出したあとで getsockname() を使用すれば、 送信元のポート番号を取得することが可能なはずです。

その他の回答 (1)

回答No.1

あまり時間がないため、手短に書かせていただきます。 まず、bind() せずにデータを送信した場合、サーバ側で受信した データグラムに含まれるポート番号は、koton_ さんの認識どおり、 クライアントで任意に割り当てられたポート番号となります。 (この一時的に割り当てられるポート番号をエフェメラルポートと 言ったりします。) 次に、一般的なBSDライクの Socket APi であれば、 送信に使用したポート番号をクライアント側で知るためには、 getsockname() という関数を使用するのが一般的だと思います。 関数の詳細については、申し訳ないですがお手持ちのマニュアルや インターネット等で検索してみてください。

koton_
質問者

補足

ありがとうございます. getsockname()の場合connect()が必要なので, UDPの場合は一般的でないですね。

関連するQ&A