由于s:=ClientSocket.Receiveln;是接受字符串的,对方发过来的是流,请问用ClientSocket.ReceiveBuf()怎么显示的,如何使用,详细点!谢谢

解决方案 »

  1.   

    ClientSocket.ReceiveBuf()意识是从win32 socket的缓冲中读取数据,数据存储的buffer自己制定,读多少字节自己指定,但不一定读到你指定的字节,要看缓冲是否有,可以通过返回值指定。读完后就可以自由处理了。多看看TCP/IP编程方面的资料。
      

  2.   

    帮你写个Demo,同一个工程,既是服务器又是客户端,自己在设计期设置IP+端口
    可能不是你要的结果,但自己可以根据此思路改成合适的,道理都是一样{f是内存流全局变量}
    var
      f:TMemoryStream;{接收,并显示内存在Memo1中}
    procedure TForm1.TcpServer1Accept(Sender: TObject;
      ClientSocket: TCustomIpClient);
    begin
      ClientSocket.ReceiveBuf(f,Sizeof(f));
      Memo1.Lines.LoadFromStream(f);
    end;{内存流读入数据,并发送}
    procedure TForm1.Button2Click(Sender: TObject);
    begin
      f.LoadFromFile('D:\1.xml');
      TcpClient1.SendBuf(f,Sizeof(f));
    end;{打开Socket}
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      TcpServer1.Active:=True;
      TcpClient1.Active:=True;
    end;{创建内存流}
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      f:=TMemoryStream.Create;
    end;{关闭Socket和释放内存流}
    procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      TcpClient1.Active:=False;
      TcpServer1.Active:=False;
      f.Free;
    end;
      

  3.   

    保存成文件:f.SaveToFile('d:\2.xml');
    或Memo1.Lines.SaveToFile('d:\2.xml');
      

  4.   

    楼上老师请教如下问题:
    一协议:通过SOCKET通信:在DELPHI6下接受通过解码可以显示,接口方配合不当,一时发送老是报错,
    采用TCP长连接,每个消息包含:1、二进制包头;2、包内容(xml格式)。
    HeardFlag(int) Length(int) Sequence Ver Enc Rec
         4          4            4       1   1   2
    HeardFlag: 协议标识,固定为KSF$,4个字节。
    Length: 消息长度,包头和包内容xml体的总长度,4个字节。
    Sequence: 消息序号,4个字节。
    Ver: 协议版本,1个字节,当前版本序号1。
    Enc: 是否加密,1个字节,当前版本不加密0。
    Rec: 保留字段,2个字节。
    请教如何发送,如何把10进制的包头+XML内容长度放在4字节里显示,曾做10-16进制转换等都不对,可能理解错误,高手指点下如何转换,发送!在线等立马散分