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で質問しましょう!
似たような質問が見つかりました
- その他(メールソフト・メールサービス) Windows10付属のメール、なぜ設定が劇的に簡単になったのか? 1 2022/12/16 13:14
- C言語・C++・C# TCP/IP通信時のサーバーからの受信 2 2022/11/23 09:11
- Outlook(アウトルック) 未読ならば受信トレイから削除する 2 2023/02/12 19:21
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- 格安スマホ・SIMフリースマホ 日本通信Simで通信量を使い切り、低速制限を受けていますが、この間にパケット使用量は発生しますか? 4 2023/07/07 16:18
- その他(メールソフト・メールサービス) メールサーバーは「PC側がメールをDL済みか否か?」を何を以て感知するのか? 2 2022/12/20 14:56
- 福祉 内定先企業からの案内メールへの返信 2 2023/06/15 09:56
- UNIX・Linux Ubuntuサーバーでメールを受信できない 7 2022/08/23 20:55
- その他(Microsoft Office) VBA メール送信済で実行されるはずが、実行されない時があります。 2 2023/02/02 14:05
- docomo(ドコモ) ドコモの114サービスで、パケット通信中となるのは 電話の時以外もありますか? 先日主人の携帯を調べ 2 2022/12/08 11:28
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Winsockを使わずにVBでSocketを...
-
TCP/IP通信時のサーバーからの受信
-
VB6のwinsockでconnectできない
-
UDPを使って通信速度測定プログ...
-
ソケットのrecvの戻り値が0
-
winsockを使った通信での同時接...
-
オセロゲームのオンラインゲーム
-
MFCソケットについて
-
VC++でのソケット通信について
-
Javaプログラム同士のプロセス...
-
C#とTCP/IPを利用したサーバー...
-
Socket通信の0バイト受信について
-
エクセル VBA でのCOMポート...
-
Winsockで接続待ちタイムアウト...
-
異なる言語間でのソケット通信...
-
UdpClient 送信元のIPアドレ...
-
名前付きパイプの通信ポートに...
-
ポート番号0について
-
JavaでBASIC認証突破
-
recv関数でフリーズしてしまう
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
TCP/IP通信時のサーバーからの受信
-
エクセル VBA でのCOMポート...
-
UDP通信する時に、相手にどうや...
-
UDP通信におけるbind関数について
-
UdpClient 送信元のIPアドレ...
-
Winsockで接続待ちタイムアウト...
-
recv関数でフリーズしてしまう
-
ソケットのクローズについて
-
ソケットのrecvの戻り値が0
-
Socket通信の0バイト受信について
-
ソケット通信 同じポート番号...
-
相手のIPアドレスを取得する方法
-
ソケットでクライアントのipア...
-
VB6のwinsockでconnectできない
-
Connectエラーが出てしまう・・...
-
ソケット通信の送受信遅延-02 ...
-
同じLAN内パソコンのIPアドレス...
-
WinSockでの通信プログラムがう...
-
UDPのソケットプログラミング
-
非ブロッキングソケットのrecv...
おすすめ情報