![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?a65a0e2)
UDP通信する時に、相手(送信側)にどうやって自分(受信側)のポート番号を教えるのでしょうか?
例えば、下記のページのサンプルだと、受信側は5555で待ち受けていますが、この場合は送信側はあらかじめ受信側が5555で待ち受けていると知っています。送信側が知らない場合に、どうやって受信側のポート番号を知らせればよいのでしょうか?
http://www.hellohiro.com/datagram.htm
No.4ベストアンサー
- 回答日時:
#1です。
> 受信側は
> DatagramSocket
> を引数なしでインスタンス化して、receiveメソッドを動かせば、そこに返ってくる、ということなのでしょうか?
「返ってくる」というのはレスポンスのことでしょうか。その前提で話をします。
最初の回答のA→B(リクエスト)とB→A(レスポンス)のうち,Aがこの質問のとおりに動作するには,Bが以下のような動作を行う必要があります。逆にBが以下のような動作をするならAの動作はご質問のとおりです。
1)Aは引数なし,Bは固定のポートを指定してインスタンス化。
2)Aは送信するリクエストパケット(DatagramPacket)を作り,これにBのIPアドレスとポートをセットして送信。
3)BのIPアドレス・ポートにAからのパケット到着。Bはこれをreceiveメソッドで受け取る。
4)BはAからのパケットに含まれるAのIPアドレスとポート番号を取得する(DatagramPacketのgetSocketAddressメソッドで多分取得可)。
5)Bはレスポンスを作成し,取得したAのIPアドレスとポートをレスポンスパケット(DatagramPacket)にセットしてこれを送信。
6)AのIPアドレス・ポートにBからのパケット到着。Aはこれをreceiveメソッドで受け取る。
UDPでは,リクエストを送って相手がそれを受け取れば,UDP通信はそれでおわりです。リクエストに対してレスポンスを返す場合,送信側と受信側が入れ替わって新規のUDP通信を始めることになります。
皆さん、回答ありがとうございます。
自分の中でイメージした感じで、簡単なコードを書いてみたのですが、うまく動きません。ただ、質問が変わってしまうので、下記のページに質問させていただきました。
もしよければ、よろしくお願いします。
http://oshiete1.goo.ne.jp/qa4937796.html
No.3
- 回答日時:
> パケットが自分に返ってくる時の自分のポート番号をどう相手に知らせるのか
知らせるまでもなく、TCP/IPレベルで、受信した時点で相手のIPアドレスやポート番号は既知のものです。
Java であれば、
> socket.receive(packet);
で受信した時の packet に、その情報が入っていて、
getAddress や getPort で取得できます。
http://java.sun.com/javame/reference/apis/jsr218 …
・待ち受ける自分自身のポート番号情報は socket が保持している
・通信相手(こちから送る相手先/こちらが受けとった送信元)のポート番号情報などは packet が保持している
ので、
サーバ側では、この受信に使った packet をそのまま使って、setData してから socket.send(packet)してやれば、
通信相手のIPアドレスやポート番号を意識しなくても、
そのまま送信者に返信を送ることができます。
クライアント側では、
・ポートを指定していないので、socketが使用するポート番号は適当に割り振られる
・socket.send 時には、そのポート番号を送信元としてデータを送りつける
・socket.receive 時には、そのポート番号宛のデータを受け取る
ことになるので、
送信に使った socket を使って、そのまま socket.receive(packet)すれば、サーバ側が送り返したデータはそのまま受信できます。
No.2
- 回答日時:
UDPにかぎらず、TCPでも同じことですが、
クライアント(一番最初に送信を行う)側は、
サーバ(一番最初に受信を行う)側のポート番号を、
別途何らかの手段であらかじめ知っておく必要があります。
その方法としては、
・ポート番号を決めうちにする
たとえば、http はTCPの 80 であるとか、DNS はUDPの53番を使うと、あらかじめ決めておく。質問者さんの挙げてるサンプルもこの方法ですね。
・別の通信で、ポート番号などの情報交換を行う。
ftp(TCP)では、コントロールとデータの2つのコネクションを張りますが、データコネクションのポート番号はコントロールコネクションで通知します。
WWWで、http://excample.com:8080/foo/bar/ などとポート番号込みでURLを指定するのも、この方法の一種でしょう。
などがあります。
回答ありがとうございます。
すみません、私の書き方が悪かったのですが、私が知りたかったのは自分が相手のウェルノウンポートに送った後に、パケットが自分に返ってくる時の自分のポート番号をどう相手に知らせるのか、ということでした。
No.1
- 回答日時:
2点間,たとえばAとBの間でUDP通信を行う場合,最初のA→B(リクエスト)を行うポート番号は教えようがありません。
Bはあらかじめ決めた固定のポート番号にバインドしてAはそのポート番号にリクエストを投げる必要があります。しかし,B→A(レスポンス)については,A→Bで送られたリクエストパケットの中に送信元ポート番号(Aのポート番号)が含まれているので,その送信元ポートにレスポンスを投げ返すのは可能かと思います。
詳しくはUDPパケットの仕様を調べてみてください。
参考URL:http://www.atmarkit.co.jp/fwin2k/network/baswinl …
回答ありがとうございます。
私の質問文が不十分だったのですが、私が知りたかったのはB→Aのレスポンスする時のBが、Aのポート番号の知り方でした。
ということは、下記のプログラムでいうと、受信側は
DatagramSocket
を引数なしでインスタンス化して、receiveメソッドを動かせば、そこに返ってくる、ということなのでしょうか?
http://www.hellohiro.com/datagram.htm
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(メールソフト・メールサービス) SMSとMMSの送信の切り替え方 1 2022/09/04 07:49
- その他(メールソフト・メールサービス) Windows10付属のメール、なぜ設定が劇的に簡単になったのか? 1 2022/12/16 13:14
- ガラケー・PHS 私はiPhoneで、相手はガラケーなんっすが、ショートメールの返事が来ません。 前の会社の時代に一緒 1 2022/06/27 20:15
- その他(IT・Webサービス) [PayPay銀行キャッシュカード拾得の件] このメールは本物か? 6 2022/09/15 21:52
- ルーター・ネットワーク機器 YAMAHAルータ設定について 1 2022/09/03 16:31
- Gmail Gmailの使い方について、詳しい方教えてください。 1 2022/04/24 13:04
- 運輸業・郵便業 郵便番号4ケタ「8790」の送り先に、通常の郵便番号で送るとどうなりますか? 3 2023/01/16 15:00
- その他(メールソフト・メールサービス) メールサーバーは「PC側がメールをDL済みか否か?」を何を以て感知するのか? 2 2022/12/20 14:56
- docomo(ドコモ) +メッセージの送受信。 au(uq mobile)のデータ回線でdocomoの電話番号の+メッセージ 2 2022/09/14 16:09
- ガラケー・PHS 携帯電話の居場所信号の発信タイミング 3 2022/07/27 14:39
このQ&Aを見た人はこんなQ&Aも見ています
-
今年はじめたいことは?
今年はこれをはじめたい!ということを教えてください!
-
人生最悪の忘れ物
今までの人生での「最悪の忘れ物」を教えてください。 私の「最悪の忘れ物」は「財布」です。
-
あなたの「プチ贅沢」はなんですか?
お仕事や勉強などを頑張った自分へのご褒美としてやっている「プチ贅沢」があったら教えてください。
-
AIツールの活用方法を教えて
みなさんは普段どのような場面でAIツール(ChatGPTなど)を活用していますか?
-
「これいらなくない?」という慣習、教えてください
現代になって省略されてきたとはいえ、必要性のない慣習や風習、ありませんか?
-
UdpClient 送信元のIPアドレスの指定方法
C言語・C++・C#
-
UDP通信におけるbind関数について
C言語・C++・C#
-
UDP通信(SNMP)したいが、うまく動かない。
Java
-
-
4
ソケット通信 同じポート番号でn対1はできない?
C言語・C++・C#
-
5
CStringのFindで文字列検索を行いたいのですが
C言語・C++・C#
-
6
UDP/IPでのソケット作成について(winsock)
C言語・C++・C#
-
7
TCP/IP のパケットの分断と結合について
UNIX・Linux
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
TCP/IP通信時のサーバーからの受信
-
UDP通信する時に、相手にどうや...
-
Winsockで接続待ちタイムアウト...
-
エクセル VBA でのCOMポート...
-
送信したデータの一部が文字化...
-
VC++でのソケット通信について
-
ソケット通信の送受信遅延-02 ...
-
WinSockでチャット
-
ソケットのrecvの戻り値が0
-
winsockを使った通信での同時接...
-
WinSockを用いたUDP送受信ソケ...
-
名前付きパイプの通信ポートに...
-
UDP通信におけるbind関数について
-
Socket通信の0バイト受信について
-
C言語(Windows)から...
-
RS-232Cのポート番号を知りたい
-
VB6のwinsockでconnectできない
-
C#でメッセンジャー作ってます...
-
UdpClient 送信元のIPアドレ...
-
ソケットでクライアントのipア...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
TCP/IP通信時のサーバーからの受信
-
UDP通信する時に、相手にどうや...
-
recv関数でフリーズしてしまう
-
ソケットのrecvの戻り値が0
-
エクセル VBA でのCOMポート...
-
Socket通信の0バイト受信について
-
Winsockで接続待ちタイムアウト...
-
ソケット通信 同じポート番号...
-
UdpClient 送信元のIPアドレ...
-
UDP通信におけるbind関数について
-
相手のIPアドレスを取得する方法
-
ソケットでクライアントのipア...
-
VB6のwinsockでconnectできない
-
ソケットのクローズについて
-
Connectエラーが出てしまう・・...
-
CreateFile関数でCOMポートが開...
-
送信したデータの一部が文字化...
-
WinSockでの通信プログラムがう...
-
closeされたsocketへの動作につ...
-
ソケットを用いた1対多通信につ...
おすすめ情報