接http://topic.csdn.net/u/20081114/11/091305bd-24cf-4c5c-9083-3993e4d98eae.html?t=fnhncum1问题!
var a,b:array of byte;
SETLENGHT(a,148)
a[0]:=$01
.....
SETLENGHT(b,54)
b[0]:=$FE
......ClientSocket1.socket.SendBuf(a[0],148)  ;
sleep(5000);ClientSocket1.socket.SendBuf(b[0],54)  ;
sleep(5000);前面没有看清楚,表述的有些问题,现在看出问题来了,发送的每个包都少了14个,发送的时候每次都掉包,而且很有规律,都是少了14个!
第一个包少了00 00-00 00 00 00 00 00 00 00 00 00 00 00第二个包少了90 6D AD 00 27 1F CA 6B  F1 43 40 00 01 00每次发送的时候一个是148个,另外一个是54,而实际发送了一个是134,一个是40,奇怪了!

解决方案 »

  1.   

    固定好封包,然后定长封包里面每个字段的格式
    相信没问题
    procedure TPolicy.Policy_CSConnect(Sender: TObject;
      Socket: TCustomWinSocket);
    var
      S: string;
      _X: TMsg;
    begin
      S := char($01);
      S := S + Char($03);
      S := S + Char($11);
      S := S + USDS_Condition;
      S := S + char($02);
      Move(S[1], _X, Length(S));
      Socket.SendBuf(_X, Length(S));
    end;
    以上代码是我在dll的socket发封包前做的动作。你看看
      

  2.   

    晕倒...
    使用我给你的函数去发,另外,你前面贴子当中我看你使用的时候用得不对。我告诉你的是:
    sizeof(b[0])*Length(b)
      

  3.   

    f Not SendBuffer(PChar(@a[0]),sizeof(a[0]),ClientSocket1.socket) then Exit; 
    sleep(2000); if Not SendBuffer(PChar(@b[0]),sizeof(b[0])*Length(b),ClientSocket1.socket) then Exit; 
    sleep(2000); 
    第二个用*length(b),第一个没有怎么解释呀? 另外我发送固定长度也有问题呀! ClientSocket1.socket.SendBuf(a[0],148)  ; 
    sleep(5000); ClientSocket1.socket.SendBuf(b[0],54)  ; 
    sleep(5000); 和使用你的方法一样也是少14个
      

  4.   

    SendBuf用法:SendBuf(Pointer(S)^, Length(S))