Client,serversocketを使い、バイナリを送受信するプログラムを作っています。
バイナリは8KB位ずつに分けて送られてくるようなのですが、最後まで送られてきたかどうかを確かめるには、どうすれば良いでしょうか?
送られてきたものをまとめて、一気にFilestreamで保存したいのですが。
C++Builderですが、
http://flex.ee.uec.ac.jp/japanese/riron/tool/builder5/scrncapt2/socket.html
にあるように、ファイルサイズを先に送っておくしかなさそうです。
返信遅れてすいません。
テキストファイルの保存は出来るようになりました。
しかし、他のファイルの保存が上手くいきません。
ファイルサイズを先に送信し、ファイルサイズと受信サイズを比べ、合っていたら保存するという風にしています。
テキスト以外のファイルの場合、
受信サイズ 106506
ファイルサイズ 483328
こんな感じになり、保存出来ません。
どうやら、36874バイトまでしか受信されないようです。
送信時はsendstreamを使い、下のように送信してます。
fs:=TFileStream.Create('c:\test.exe',fmOpenRead or fmShareDenyWrite);
socket.SendText(IntToStr(fs.size));
Socket.SendStream(fs);
socket.Close;
なぜ36KBまでしか受信出来ないのかわかる方いらっしゃいましたら、教えてください。
ちなみに、受信にはReceiveBufを使っています。
ツイート | ![]() |