用tcpserver发送一个exe文件,是否要先转成二进制数据来发,还是
tcpserver发送时会自动转换?
另外,我的协议规定一桢的数据长度只能是1024个字节,这在发送时怎么控制?

解决方案 »

  1.   

    直接读取文件发送就行了,不需要转换,本身二进制、十进制等对你文件处理发送没什么影响,其实是一样的。
    协议规定一桢1024个字节,你每次读取exe文件时不能超过这个长度,所以一个文件你要分多次读取,分成多个数据包来发送。
      

  2.   

    用TcpServer1.SendBuf(buf,1024);
    buf自己处理。
    譬如:
    TServerBuf=record
        filename:string;
        offset:integer;
        buffer:array[1000] of byte;
    end;
    用FileRead循环读取1000字节的文件数据,添到buffer中,然后发送该结构。
      

  3.   

    以流(Stream)的格式发送
    var
     fs:tfilestream;
    begin
     fs:=TFileStream.Create('c:\abc.exe',fmOpenRead);
     TcpClient1.SendStream(fs);end;
    接收用
      

  4.   

    "以流(Stream)的格式发送"
    但是我的协议中是这样的格式:
    包头(###)+序号(这个就是分次发送的序号)+内容(1024字节,1k)+包尾
      

  5.   

    不能用SendStream,用SendBuf
    最好你的格式再加一项来表示包的长度,这样比较容易确定包尾。
    p:PChar;
    FileHandle:integer;FileHandle:=FileOpen(.....);
    GetMem(p,1024+20);
    写包头到p中
    ////循环
    {
    写序号到p中
    读取文件1K,写到p中
    写包尾到p中
    发送该缓冲区p
    }
      

  6.   

    "读取文件1K,写到p中"
    怎么读取1k呢?能否告知