UDPの帯域測定プログラムを作成しています。
100個のパケットを受信した後、受信処理を終了させるのに、
endの文字を挿入したパケットを受信することで受信を終わらせようと考えています。
パケットを送信する側は100個のパケットを送信し終えたら、endのパケットを送信します。
受信側はendのパケットを受信したら受信を終了します。
受信側がendを受信したら送信側がendのパケットを送信するのを止めさせたいのです。
UDPではパケットが消失するため、送信側は受信側がendを受け取ったことを確認したあとに送信をやめなければなりません。
endを受け取ったら、合図を返信すればよいと思いますが、その合図が消失することもあるので、「endを受信したら合図を返信する」という処理を終わらせるタイミングも分かりません。
どのようにしてendを受け取ったことを確認すればよいでしょうか?
No.2ベストアンサー
- 回答日時:
> 送信側は受信側がendを受け取ったことを確認したあとに送信をやめなければなりません。
そういう要望が出ている時点で「UDPを使うのは間違い」というか、
そういう用途にはTCPを使うべき、ということになりますが
どうしてもUDPを使いたかったら、
TCP的なハンドシェイクが必要になるでしょう。
それと、最終目的が
> 100個のパケットを受信した後、受信処理を終了させるのに、
なのでしたら、
> パケットを送信する側は100個のパケットを送信し終えたら、endのパケットを送信します。
ではダメでしょう。パケット消失が発生したら、送信側が100個送っても、受信側は100個になりません。
受信側で、100個のパケットを受信し終えたところで、送信側に「受信完了」のパケットを送る必要があります。
たとえば、
・送信側は、受信側から「受信完了」パケットが届くまでは普通のパケットを送信し続ける
・受信側は、100個のパケットを受信し終えたら、以降、パケットを受信するたびに「受信完了」パケットを送信側に送りつける
という処理にすれば、パケット消失が発生しても、いつか消失せずにパケットが届けば最終的には処理が完了します。
inoue_kou様、mtaka2様のアドバイスのおかげで
UDPで受信終了の合図を出して受信終了させることができました。
アドバイスをしていただき、ありがとうございました。
また、質問させていただくと思いますのでその時はよろしくお願いします。
No.1
- 回答日時:
「UDPではパケットが消失する」と認識しているなら、UDPでやる以上完全にコミュニケーションをとる方法はないと思います。
たとえば、もし通信が途中で切れてしまったらどうしますか?
endを送ったのに消失した。と同じ状況になりませんか?
送信側がendを送り、タイムアウト以内に受信側からendを受け取った事の返答が無ければ
測定不能にして処理を終了する方法はダメですか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・【お題】絵本のタイトル
- ・【大喜利】世界最古のコンビニについて知ってる事を教えてください【投稿~10/10(木)】
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
TCP/IP通信時のサーバーからの受信
-
VB6のwinsockでconnectできない
-
ソケットのクローズについて
-
recv関数でフリーズしてしまう
-
UDP通信におけるbind関数について
-
ソケットのrecvの戻り値が0
-
UdpClient 送信元のIPアドレ...
-
ソケットでクライアントのipア...
-
UDPの宛先ポートと送信元ポート...
-
ソケット通信 同じポート番号...
-
空きポートの取得方法
-
UDP通信する時に、相手にどうや...
-
Socket通信の0バイト受信について
-
同じLAN内パソコンのIPアドレス...
-
UDP通信(SNMP)したいが、うま...
-
相手のIPアドレスを取得する方法
-
どうか、POSTでのファイル転送...
-
非ブロッキングソケットのrecv...
-
UDPで受信終了の合図を出して受...
-
WinSockでチャット
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
TCP/IP通信時のサーバーからの受信
-
エクセル VBA でのCOMポート...
-
VB6のwinsockでconnectできない
-
UDP通信におけるbind関数について
-
ソケットのクローズについて
-
ソケットのrecvの戻り値が0
-
Winsockで接続待ちタイムアウト...
-
UDP通信する時に、相手にどうや...
-
ソケットでクライアントのipア...
-
recv関数でフリーズしてしまう
-
Connectエラーが出てしまう・・...
-
UdpClient 送信元のIPアドレ...
-
Socket通信の0バイト受信について
-
同じLAN内パソコンのIPアドレス...
-
Winsockを使わずにVBでSocketを...
-
ソケットを用いた1対多通信につ...
-
ソケット通信 同じポート番号...
-
相手のIPアドレスを取得する方法
-
CreateFile関数でCOMポートが開...
-
送信したデータの一部が文字化...
おすすめ情報