socket 传文件的问题  不知道文件的大小,如何判断文件传完了
我发一个请求,对方给我发一个大文件,没有说明文件的任何情况,只是一个文件流。如何判断这个文件传完了啊

解决方案 »

  1.   

    这肯定不行的。
    你不知道SIZE,就必须要规定一个结束的包,收到这个表示结束的包就说明传完了。
      

  2.   

    你得首先设置通讯协议,比如发送 $FFFF0001代表 开始发送数据等
    我是这样处理这个过程
    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
        ^^^^^   //没接收完,继续接受