socket 传文件的问题 不知道文件的大小,如何判断文件传完了
我发一个请求,对方给我发一个大文件,没有说明文件的任何情况,只是一个文件流。如何判断这个文件传完了啊
我发一个请求,对方给我发一个大文件,没有说明文件的任何情况,只是一个文件流。如何判断这个文件传完了啊
解决方案 »
- 这些控件是怎么添加进去的???
- 如何从字符串右往左取n位
- 用摄像头拍A4纸,边缘变形,请问有什么方法解决?
- 急求:Delphi中如何进行TreeView之间的拖拽?
- Dll中如何传递超过255长度的字符串?
- 菜鸟老板让菜鸟把数据库里的字符串加密,字段类型是varchar型的,可我解回来有的数据就不对了,高手告诉我主要加密时产生回车符,数据库
- DDL问题,高手请进,在线等回答(重分等待)!!
- 调用FORM时,如何返回一个值?(菜鸟问题)
- DLL问题...............
- panel 组件如何在窗体中居中显示
- 没用过Delphi,请问用VC++ 6.0开发出来的标准的Windows DLL导出类可以在Delphi中直接使用吗?
- 急...请教一个简单的问题.
你不知道SIZE,就必须要规定一个结束的包,收到这个表示结束的包就说明传完了。
我是这样处理这个过程
F:TFIELSTREAM VAR BUF:ARRAY [0。。4000] OF BYTE; PROCEDURE SENDSREAM;
X:INTEGER;
BEGIN
IF F.POSITION=0 THEN //如果流的位置在开头,说明是第一次发送
PLONGWORD(@BUF[0])^:=F.SIZE; //则把流的长度写入缓冲区
X:=F.READ(BUF[8],3993); //读取 x个数据到缓冲区
PLONGWORD(@BUF[4])^:=X; //把当前要发送的数据快的大小也写入缓冲区
^^^^^
SOCKET.SENDBUFFER(BUF[0],X+8);
END;
接收时候,第一接收 执行
len:=PLONGWORD(@BUF[0])^;//获取流长度以后接收每一块都
l:=PLONGWORD(@BUF[4])^;//获取当前块文件数据的长度 resl:=resl+l;
if resl<len then
^^^^^ //没接收完,继续接受