我写了一个Socket传输二进制数据的程序,发现在接收的时候有问题,在发送的时候BYTE的值是90,67,90,67,90,67,32……,长度是153,可是在接收的时候发现接收进来的二进制数据变了,是0,0,0,1,0……,长度上万,大的惊人。请问是怎么回事。
部分代码如下:
var
  bytTele: array of byte;
  iLen: integer;  SetLength(bytTele,iLen);
  Socket.ReceiveBuf(bytTele, iLen);
执行后发现bytTele的数值与发送的时候不一样,请问怎么解决。

解决方案 »

  1.   

    直接赋值恐怕不能代替发送操作;另外,先把socket.ReceiveBuf(bytTele,iLen)改成     socket.ReceiveBuf(bytTele[0],iLen)试试
      

  2.   

    不行,显示的结果还是不对。接收的完整代码:
    bytTele: array of byte;
    iLen, count:integer;
    str: string;  SetLength(bytTele,iLen);
      SetLength(str,iLen);
      Socket.ReceiveBuf(bytTele, iLen);
      for count:=1 to iLen do
        str[count]:=char(bytTele[count-1]);
      Memo1.Lines.Text:=str;发送的代码:
      bteTemp:=myTC_StrToDab(Memo1.Lines.Text);
      Socket.SendBuf(bteTemp, Length(bteTemp));其中myTC_StrToDab是把字符串转换成二进制。
    function TForm1.myTC_StrToDab(AString: string): TOneDynArrayByte;
    var
      i,iLength:Integer;
      my_DynArrayOfByte:TOneDynArrayByte;
    begin
      iLength:=length(AString);
      SetLength(my_DynArrayOfByte,iLength);
      for i:=1 to iLength do begin
        my_DynArrayOfByte[i-1]:=Byte(AString[i]);
      end;
      Result:=my_DynArrayOfByte;
    end;
    ************************************************
    采用的是非堵塞方式。TCP/IP。
    现在主要是在接收的时候有问题,在接收时,执行完
    Socket.ReceiveBuf(bytTele, iLen);
    我察看bytTele的值,发现与发送的时候不一样,所以在后面的二进制转换成字符串的时候不能正确显示。应该怎么办呀。
      

  3.   

    不知道了!要不,Socket.SendBuf(bteTemp, Length(bteTemp));也换成
       Socket.SendBuf(bteTemp[0], Length(bteTemp));试试?
      

  4.   

    发:Socket.SendBuf(bteTemp, sizeof(bteTemp));收:Socket.ReceiveBuf(bytTele,sizeof(bytTele));试试
      

  5.   

    to xhg0418(新手)
    说对了,收发方都要加[0],SendBuf,ReceiveBuf里面的参数是要传地址。虽然还是有些不是特明白,但是至少问题解决了,多谢,准备接分吧。呵呵。