在发送文件的信息之前,最好先发送文件的长度。接受方得到数据后先展开文件长度,然后的操作就只需要做个循环,读取一定长度的缓冲区后写入文件就可以了。TCP协议对包的大小没有限制的,有限制的是ip,但那属于底层协议所管的。你只要交给tcp那么多的数据,它肯定会帮你全部传输的。不用你去关心她是怎么打包发送的,除非你使用UDP.使用Sendstream时需要注意stream不要你自己去显式删除,由于tcp的发送使用异步方式,因此你不能认为该函数返回就已经是整个数据都发送过去了。sendstream会负责适当的清楚工作的,很可能不是由它完成的,而是由进程关闭时而作的清场工作。

解决方案 »

  1.   

    “在DELPHI的SOCKET封装了SENDSTREAM函数为什么没有接收的函数?请教!”
    这个问题呢?能解释一下吗?
      

  2.   

    请教 sunsetyang() :
        按你的意思,用 sendbuf 方法来传输文件的话,是不是不用理文件的长度?因为“你只要交给tcp那么多的数据,它肯定会帮你全部传输的。不用你去关心她是怎么打包发送的,”对不对?
      

  3.   

    呵呵,有接受函数啊,
     Len:=Socket.ReceiveLength;
     Temp:=Socket.ReceiveText;
     filem.Write(PChar(Temp)^,len);
    FILEM为文件流,
    这样接受,我在INTERNET上用阻塞模式,发4M左右得文件都没有问题
    要具体得代码,QQ联系,15056091