封包格式为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;
我感觉自己写的没错,可是发到服务器上就是没反应,它把我发去的数据包当作垃圾给仍了
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;
我感觉自己写的没错,可是发到服务器上就是没反应,它把我发去的数据包当作垃圾给仍了
解决方案 »
- 谢谢群主给我解决的问题,上次没给到分,新开帖给你分!
- raize控件如何实现更换皮肤?
- 还是这个问题,请老大帮忙,确实不会了!!!
- d7如何判断远程文件是否存在?如:判断http://www.163.com/123.rar是否存在!
- 请推荐经典第三方控件,及下载网址
- 怎么让自定义的属性在Object inspector出现下拉框?
- edit 输入字符时间隔时间记录
- 谁知道 像迅雷下载列表的列表框是怎么做的
- cxgrid如何进行预览后打印?
- 求问工具下载地址!!
- 请问哪里有delphi help文档中文版的下载吗?
- 帮我看一段程序,统计一个目录的大小 ,不知问题在哪里,得到的结果不对,顶者有分!!!!!!!!!!!
在对应按钮中写入ClientSocket1.Socket.SendBuf(arr2[0],length(arr2));
最后在ClientSocket on Read事件中写入
Socket.ReceiveBuf(buf[0],len);
现在我只能收到服务器的广播信息,但我向它发送的请求却得不到回应!请问我还缺少什么
能接受表示接受部分写的没错
//
一般自定义的协议或者公开的协议都要
checksum的,而且要把check置0,在checksum
我第一次的时候就犯了这个错误。
//
楼主看看