お世話になります。
WinSockを用いてUDPパケット受信プログラムを作成しています。
環境はVC++です。ダイアログベースで、
STARTボタンを押すと受信開始します。
送信側よりパケットを1000個送信した場合、受信側では、
int num;
SOCKET sock;
char buf[1500];
//ソケットの設定は省略
while(1){
num = recvfrom(sock, buf, sizeof(buf), 0, NULL, NULL);
printf("%d",num );
if( num == SOCKET_ERROR){
break;
}
}
recvfrom()で受信していますが、送信側で送信が完了しても
while()を抜けないのか、応答なし(フリーズ)してしまいます。
printf()で表示してみると、
ちゃんと送信パケット個数回表示されています。
送信パケット数は変動するため、受信側のプログラムには
個数がわかりませんため、while()でループしています。
while()を抜ける条件はどうしたらいいのでしょうか?
ちなみにrecvfrom()の戻り値として
SOCKET_ERROR,0を指定してもエラーになります。
長くなりましたが、どうぞよろしくお願い致します。
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
UDPはコネクションレスなので、送信側が終了してもそれを受信側で認識する手段はない。
従ってアプリケーションレベルで終了パケットを定義して、そのパケットが来たら終わりと決めておかない限り受信側で終了を確認できない。
あるいは、送信側が一定時間内に送ると決めておいて、受信側はその時間を十分に超えたらタイムアウトで終了するとか。
何にせよUDPを使う場合は送ったパケットが届かなかった場合も含めてちゃんとプロトコルを考えておかないとまともに動くものを作るのは難しいよ。
回答ありがとうございます。
送信側の終了パケットで検討してみます。
大変わかりやすく、考え方わかりました。
本当にありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# TCP/IP通信時のサーバーからの受信 2 2022/11/23 09:11
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- UNIX・Linux Ubuntuサーバーでメールを受信できない 7 2022/08/23 20:55
- PHP どうして送信されないのでしょうか? 1 2022/12/09 05:23
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- Outlook(アウトルック) Windows11にしてからOutlook2019がすぐに固まってしまう件に関して。 2 2023/01/21 11:52
- Gmail gmailで独自ドメインアドレスのメールが届かない件 1 2023/08/25 23:24
- その他(メールソフト・メールサービス) hotmail タイムアウトエラー 2 2023/04/16 18:48
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
UDP受信時の通信異常検知について
-
遅延確認応答について教えてく...
-
Outlookの「受信日時」「件名」...
-
DHCPOFFERの受信について
-
パケット受信 recvfrom( )につ...
-
シリアル通信時のデータ受信方法
-
「TCPは全二重可能」の意味
-
パソコンに詳しい方教えて下さ...
-
バッチファイルでディレクトリ...
-
指定ファイルをFTPで自動アップ...
-
複数のテキストファイルの特定...
-
java.lang.NumberFormatExcepti...
-
別のフォルダにファイルを移動...
-
Zipファイルをエクセルに指定変...
-
グローバルIPアドレスを取得し...
-
Windows上のファイル操作の履歴...
-
Apacheでファイルをアップロー...
-
32ビット&64ビットマシン
-
robocopyの失敗について
-
データのバックアップについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Outlookの「受信日時」「件名」...
-
TCP/IP のパケットの分断と結合...
-
Outlookの「受信日時」「送信者...
-
CRC-CCITTに関しての仕様とサン...
-
シリアル通信時のデータ受信方法
-
Excxel vba でYahoo API で住所...
-
recv関数の戻り値について
-
UDP受信時の通信異常検知について
-
ASP.NET C#でPOST受信
-
RS232cを用いた送信プログラム
-
VC++メッセージの送受信につい...
-
PC98で232c送信winndowで受信で...
-
TCPのプログラミングで質問…と...
-
VBのMSCommコントロールを使っ...
-
「TCPは全二重可能」の意味
-
DHCPOFFERの受信について
-
VB2010で、シリアル通信の方法...
-
msgrcv( )で領域破壊?
-
ネットワークでの受信バイト数
-
シリアル通信
おすすめ情報