今天在写通信时,用TClientSocket 和TServerSocket 控件时,用SendBuf 和 ReceiveBuf发送和接收数据,可是,发送的数据和接收的数据总不对,请高手解决啊!
  发送的数据是:
020061616161610000000000000000000000000000006262626262000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  接收的数据是:
0EFC120060FC1200945C490068FC1200AF5C490060FC12006889DC002424DC0024F20200616161616100000000000000000000000000000062626262620000000000000000000000

解决方案 »

  1.   

    楼上,上面的数据是内存数据,我将它转换出来的!
    下面是代码:
    procedure TMySocket.ClientSocketRead(Sender: TObject;Socket: TCustomWinSocket);
    var
        Data :array[0..$FFF]of Byte;
        nLen :integer;
        nRecvLen :integer;
    begin
        nLen:=$1000;
        nRecvLen:=ClientSocket.Socket.ReceiveBuf(Data,nLen);
    MainForm.Memo1.Lines.Add(HexDataToHexStr(@aData[0],nRecvLen));//将数组里面的内容读出来!
        if nRecvLen > 0 then
        begin
            DispathData(@Data[0],nRecvLen);
        end;
    end;
      

  2.   

    HexDataToHexStr,是16进?数据不是用2进传么
      

  3.   

    终于搞定!!!
      郁闷,是DELPHI的pchar 类型有问题!
     郁闷!
      

  4.   

    请问楼主是如何解决这个问题的?俺在sendtext时也遇到这个问题,收不完就成了乱码了.
      

  5.   

    问题是这么解决的:
     举例如下:
    下面的情况会出错!就会犯我上面的问题!
    procedure MySend(Data :pchar; nLen :integer);
    begin
        ClientSocket.Socket.SendBuf(Data,nLen);
    end;
    改为下面代码就不会:
    procedure MySend(Data :pchar; nLen :integer);
    var
        Buf :array[0..$FFFF]of byte;
    begin
        CopyMemory(@Buf[0],@Data[0],nLen);
        ClientSocket.Socket.SendBuf(Buf,nLen);
    end;我想大家应该知道 问题出在哪里了吧!不过,还有个问题,请问高手,怎么接帖呢?
      是我自己接,还是斑竹来接呢!
      

  6.   

    多此一举
    procedure MySend(Data :pchar; nLen :integer);
    begin
        ClientSocket.Socket.SendBuf(Data[0],nLen);
    end;
      

  7.   

    这样也行的。。procedure MySend(Data :pchar; nLen :integer);
    begin
        ClientSocket.Socket.SendBuf(Data^,nLen);
    end;
      

  8.   

    ClientSocket.Socket.SendBuf(Data[0],nLen);
    为什么只发一个Data[0]?Data[1]和以后的呢?