

お世話になります。
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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DLLファイルの逆コンパイラにつ...
-
c言語
-
VisualStudio2022でC言語プログ...
-
【C言語】全角文字の配列を、全...
-
コマンドプロンプトについて。
-
Cのコンパイルでコメントアウト...
-
C言語の関数のextern宣言
-
プログラミング言語でアプリや...
-
UART通信の取説で,left floati...
-
C#でTreeViewのCheckBoxのサイ...
-
だれがとけるの?
-
Notepad++の関数リスト表示でC...
-
chatgptでつくってもらったコー...
-
C++でデスクトップGUIアプリ開...
-
C言語の質問です。バイナリ形...
-
いまc言語の標準ライブラリ文字...
-
大量のデータを読み込んで表示...
-
visual studio 2022でのC#プロ...
-
プログラマー達は何故、プログ...
-
PIC12F1822でLED調光器を作りたい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Outlookの「受信日時」「件名」...
-
TCP/IP のパケットの分断と結合...
-
Outlookの「受信日時」「送信者...
-
UDP受信時の通信異常検知について
-
CRC-CCITTに関しての仕様とサン...
-
ASP.NET C#でPOST受信
-
recv関数の戻り値について
-
VB2010で、シリアル通信の方法...
-
HPのメールフォームについて
-
アンテナってあるでしょ?あれC...
-
シリアル通信時のデータ受信方法
-
赤外線通信
-
C#にてCTI。RS232Cの受信と送信...
-
受信処理の終了条件
-
PICを用いた赤外線通信
-
DHCPOFFERの受信について
-
VB2005でTCP/IPソケット通信で...
-
.NetのTimerについて
-
文字化け
-
winsockを使ったTCP及びUDP通信...
おすすめ情報