ICS自己带的例子都是字符串传递,我现在想先传字符串,然后接着传一个二进制的文件,这个不知道在ICS怎么弄???

解决方案 »

  1.   

    没用过ICS,如果有流的发送/接收的话,应该是方便用的;如果有Buffer的传送也可以把文件分段到Buffer中传输
      

  2.   

    发送:
    procedure TForm1.Button1Click(Sender: TObject);
    var
      s: string;
      stream: TFileStream;
    begin
      stream:=TFileStream.Create('1.txt', fmOpenRead);
      try
        setlength(s, stream.Size);
        stream.Read(s[1], stream.Size);
        IdTcpClient1.WriteLn(s);
      finally
        stream.Free;
      end;
    end;接收:
    procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
    var
      buf: array of byte;
      stream: TFileStream;
    begin
      try
        count:=AThread.Connection.ReadFromStack;
        if count<>0 then
        begin
          setlength(buf, count);
          AThread.Connection.ReadBuffer(buf[0], count);
          stream:=TFileStream.Create('2.txt', fmCreate);
          try
            stream.Write(buf[0], count-2);//indy控件发string时会在后面加2个字符(\r\n),现在要去掉
          finally
            stream.Free;
          end;
        end;
        Memo1.Lines.Add(inttostr(count));
      finally  end;
    end;可以直接把文件流当string发过去,注意我加的注释,然后根据你那个控件自行修改。
      

  3.   

    呵呵,谢谢clasj,我直接用winsock写了,不用控件了。结账!