

お世話になります。
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ランキング
-
Outlookの「受信日時」「件名」...
-
CRC-CCITTに関しての仕様とサン...
-
TCP/IP のパケットの分断と結合...
-
UDP受信時の通信異常検知について
-
パケット受信 recvfrom( )につ...
-
H8-3052Fを用いた文字列の受信
-
PC98で232c送信winndowで受信で...
-
パソコンに詳しい方教えて下さ...
-
バッチファイルでディレクトリ...
-
隠しファイルとZip圧縮について
-
バックアップの用語
-
java.lang.NumberFormatExcepti...
-
robocopyの失敗について
-
ホームページビルダー17のサイ...
-
別のフォルダにファイルを移動...
-
visual studio 2008 libファイ...
-
Windows上のファイル操作の履歴...
-
Zipファイルをエクセルに指定変...
-
Batファイルでhostsを追加したい
-
Lhaplusが発したと、みられるエ...
マンスリーランキングこのカテゴリの人気マンスリー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通信...
おすすめ情報