プロが教えるわが家の防犯対策術!

UDPの帯域測定プログラムを作成しています。
100個のパケットを受信した後、受信処理を終了させるのに、
endの文字を挿入したパケットを受信することで受信を終わらせようと考えています。

パケットを送信する側は100個のパケットを送信し終えたら、endのパケットを送信します。
受信側はendのパケットを受信したら受信を終了します。

受信側がendを受信したら送信側がendのパケットを送信するのを止めさせたいのです。
UDPではパケットが消失するため、送信側は受信側がendを受け取ったことを確認したあとに送信をやめなければなりません。
endを受け取ったら、合図を返信すればよいと思いますが、その合図が消失することもあるので、「endを受信したら合図を返信する」という処理を終わらせるタイミングも分かりません。

どのようにしてendを受け取ったことを確認すればよいでしょうか?

A 回答 (2件)

> 送信側は受信側がendを受け取ったことを確認したあとに送信をやめなければなりません。



そういう要望が出ている時点で「UDPを使うのは間違い」というか、
そういう用途にはTCPを使うべき、ということになりますが

どうしてもUDPを使いたかったら、
TCP的なハンドシェイクが必要になるでしょう。

それと、最終目的が

> 100個のパケットを受信した後、受信処理を終了させるのに、

なのでしたら、

> パケットを送信する側は100個のパケットを送信し終えたら、endのパケットを送信します。

ではダメでしょう。パケット消失が発生したら、送信側が100個送っても、受信側は100個になりません。

受信側で、100個のパケットを受信し終えたところで、送信側に「受信完了」のパケットを送る必要があります。
たとえば、
・送信側は、受信側から「受信完了」パケットが届くまでは普通のパケットを送信し続ける
・受信側は、100個のパケットを受信し終えたら、以降、パケットを受信するたびに「受信完了」パケットを送信側に送りつける
という処理にすれば、パケット消失が発生しても、いつか消失せずにパケットが届けば最終的には処理が完了します。
    • good
    • 0
この回答へのお礼

inoue_kou様、mtaka2様のアドバイスのおかげで
UDPで受信終了の合図を出して受信終了させることができました。

アドバイスをしていただき、ありがとうございました。

また、質問させていただくと思いますのでその時はよろしくお願いします。

お礼日時:2009/12/15 16:13

「UDPではパケットが消失する」と認識しているなら、UDPでやる以上完全にコミュニケーションをとる方法はないと思います。



たとえば、もし通信が途中で切れてしまったらどうしますか?
endを送ったのに消失した。と同じ状況になりませんか?

送信側がendを送り、タイムアウト以内に受信側からendを受け取った事の返答が無ければ
測定不能にして処理を終了する方法はダメですか?
    • good
    • 0

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