TCPでパケットロス?
初めまして。投稿させて頂きます。
現在C/C++でwinsockを使ったプログラミングを行っています。
その中で2台の端末間で画像データのやり取りを行っています。
【開発環境】
OS:Windows Xp sp2,sp3
IDE:VisualStudio2005(2台)
TCPを使い、ファイルのバイナリデータを送信して受信し、保存するという単純なプログラムなのですが、受信側で不定期にパケットロス(?)が発生します。以下に簡単なプログラムを示します。
【送信側】
byte szBuf[1025];
int read_fd;
_sopen_s(&read_fd,"test.bmp",_O_RDONLY|_O_BINARY,_SH_DENYNO,0);
while(true) {
rtn=_read(read_fd,szBuf,1024);
if(rtn<=0)break;
else {
snd=send(s,(char*)&szBuf,rtn,0);
}
}
【受信側】
byte buf[1025];
ofstream os;
os.open("test.bmp",ios::binary|ios::out);
byte buf[1025];
while(true) {
int nRcv = recv(s, (char*)&buf, 1024, 0);
if(nRcv<=0) {
break;
}
os.write((char*)buf,nRcv);
}
os.close();
何度か実行してみると、受信サイズが送信サイズが少ないことがあり、一回ごとの受信パケットを見てみるとパケットをロスしているような場所(受信サイズが1バイト)があります。
ちなみにデバッグモードの時はあまり起こりませんが、通常実行時は頻繁に発生します。
試しに送信側の
snd=send(s,(char*)&szBuf,rtn,0);
の後に
Sleep(1);
と入れてみると、デバッグモードでも通常実行時でも(今のところは)受信の不足がなくなりました。
フィルタリングソフトで細かいことは見ていないのですが、プログラムに問題、あるいは心当たりがある方はご教示願います。