大家看看我的封包程序对么

staroftheeast 2006-03-01 05:32:05
封包格式为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;
我感觉自己写的没错,可是发到服务器上就是没反应,它把我发去的数据包当作垃圾给仍了
...全文
103 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
QQgenie 2006-03-05
  • 打赏
  • 举报
回复
端口对了吗?
charles1107 2006-03-03
  • 打赏
  • 举报
回复
seq应该为8位,00000000才对,你再看看
staroftheeast 2006-03-02
  • 打赏
  • 举报
回复
我刚刚试了checksum先清零再计算,好像还是不行,就是收不到我要的信息,只有广播信息
baiduan 2006-03-02
  • 打赏
  • 举报
回复
//
能接受表示接受部分写的没错
//
一般自定义的协议或者公开的协议都要
checksum的,而且要把check置0,在checksum
我第一次的时候就犯了这个错误。
//
楼主看看
staroftheeast 2006-03-02
  • 打赏
  • 举报
回复
我在程序中用clientsocket控件连到服务器之后,var arr2,buf:array of byte;
在对应按钮中写入ClientSocket1.Socket.SendBuf(arr2[0],length(arr2));
最后在ClientSocket on Read事件中写入
Socket.ReceiveBuf(buf[0],len);
现在我只能收到服务器的广播信息,但我向它发送的请求却得不到回应!请问我还缺少什么

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧