

お世話になります。
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ランキング
-
CSSが全く分かりません、お助け...
-
DLLファイルの逆コンパイラにつ...
-
visual studio 2022でのC#プロ...
-
プログラマー達は何故、プログ...
-
C言語について(初心者)
-
バッチファイルで以下のような...
-
【C言語】全角文字の配列を、全...
-
Windows Formアプリからコンソ...
-
C言語 関数、変数の宣言について
-
プログラミングc++を全く分か...
-
あってる
-
DNCL(共テ用プログラミング言語...
-
逆コンパイルと逆アセンブルの...
-
ArduinoでMouse関数を使用して...
-
Notepad++の関数リスト表示でC...
-
c言語でイベントフラグを使った...
-
C言語の質問です。バイナリ形...
-
int16_t の _t は何?
-
大量のデータを読み込んで表示...
-
C言語の関数のextern宣言
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Outlookの「受信日時」「件名」...
-
TCP/IP のパケットの分断と結合...
-
CRC-CCITTに関しての仕様とサン...
-
Outlookの「受信日時」「送信者...
-
UDP受信時の通信異常検知について
-
ASP.NET C#でPOST受信
-
シリアル通信時のデータ受信方法
-
VC++メッセージの送受信につい...
-
パケット受信 recvfrom( )につ...
-
PC98で232c送信winndowで受信で...
-
「TCPは全二重可能」の意味
-
Windows Mobile6.1 メール受信...
-
ネットワークでの受信バイト数
-
recv関数の戻り値について
-
文字化け
-
TCP/IPで受信エラー
-
Excxel vba でYahoo API で住所...
-
VB2005でTCP/IPソケット通信で...
-
マルチスレッドに挑戦したい
-
TCPのプログラミングで質問…と...
おすすめ情報