封包格式为0x02   SEQ   Length   Data   CheckSum  0x03(以十六进制02开头,03结尾),SEQ为序列号(seq为ASCII(8),比如00000000),Length为Data长度(Hex(2)),Check Sum是自”传输序号”字段的第一个 Byte 起,至”资料内容”字段最后一个 Byte 止,XOR 所有的 Bytes,并将所得之值存放于本字段。
    Data:array of byte,假设Data为7 3 0 0。
请问最后结果是2 0 4 0 7 3 0 0 0 3么,或者请看一下我得封包程序
procedure buildpacket1(arrdata:array of byte);     //第一层封包
var
checksum:byte;//校验码
i,j:integer;
arr1:array of byte;
begin
    setlength(arr1,length(arrdata)+6) ;  //设置arr1的长度
    arr1[0]:=2;//报头
    arr1[1]:=00000000;//向IX Gateway发请求
    Pbyte(@arr1[3])^:=hi(Length(arrdata)); //传入数据的长度,length字段为两个字节
    Pbyte(@arr1[2])^:=lo(Length(arrdata));
    for j:=4 to 4+length(arrdata)-1 do    //写入数据
        arr1[j]:=arrdata[j-4];
    checksum:=arr1[1];
    for i:=2 to 2+1+Length(arrdata) do
        checksum:=checksum xor arr1[i] ;
    arr1[4+length(arrdata)]:=checksum;        //checksum赋值
    arr1[5+length(arrdata)]:=3;                 //报尾
end;
我感觉自己写的没错,可是发到服务器上就是没反应,它把我发去的数据包当作垃圾给仍了

解决方案 »

  1.   

    我在程序中用clientsocket控件连到服务器之后,var arr2,buf:array of byte; 
    在对应按钮中写入ClientSocket1.Socket.SendBuf(arr2[0],length(arr2));
    最后在ClientSocket on Read事件中写入
    Socket.ReceiveBuf(buf[0],len);
    现在我只能收到服务器的广播信息,但我向它发送的请求却得不到回应!请问我还缺少什么
      

  2.   

    //
    能接受表示接受部分写的没错
    //
    一般自定义的协议或者公开的协议都要
    checksum的,而且要把check置0,在checksum
    我第一次的时候就犯了这个错误。
    //
    楼主看看
      

  3.   

    我刚刚试了checksum先清零再计算,好像还是不行,就是收不到我要的信息,只有广播信息
      

  4.   

    seq应该为8位,00000000才对,你再看看