我使用TIDUDP做的程序,自己给自己发送接收都没有问题,但是和同事用vc写的一个程序互发信息的时候,会莫名其妙的在原有的信息上加上一个“心形”或者一个“笑脸”,比如我发送123给他,他接到的却是“心形”123,他给我发送的时候,我接受也会出现问题,我做的程序是要直接和硬件通信的,容不得半点错误,现在我不知道问题到底出在什么地方,是Tidudp控件在发送信息时又加上了什么别的信息吗?
另外,怎么能够截取发送出去的消息到底是什么哪?想查看2进制内容,可以吗???
谢谢回答,如果分数不够可以在加。
另外,怎么能够截取发送出去的消息到底是什么哪?想查看2进制内容,可以吗???
谢谢回答,如果分数不够可以在加。
看到发送的部分程序代码才能确定问题在哪。
Send(AData: string);
还是SendBuffer(var ABuffer; const AByteCount: integer);
你应该定义一个结构体,调用SendBuffer(...)来发送,比较合理。
TCommBlock=record // 用来存放消息
Msg :string[255]; //命令体
end;var comm:TCommBlock;
然后用sendbuffer(comm,sizeof(comm));
用idudpserver接受也没有问题
但是一旦用同事VC写的程序来接受,显示就会出现乱码(姑且这么叫吧)
VC调试一下,看看接收的是否和你发送的相同,感觉应该是乱码在字符串后面出现的,VC里面碰到0认为是字符串的结尾。
数据体再加一个字符串的长度,就好解决问题了。
TCommBlock=record
len:integer;
Msg:string[255];
end;
WPE PRO (Winsock Packet Editor)中文版
Sniffer Pro v4.70.004
等等建议用WPE PRO,小巧方便。
如果我同时调用两次sendbuffer的话
就会在接收到的第二个字符串后面出现一个“笑脸”
太可恶了
哎……
WPE PRO在那里能down?
1)首先打开WPE PRO后先点工具栏的“目标程序”按钮,选择你要监视的程序。
2)“目标程序”按钮下边的工具栏有3个小按钮,分别是“开始”、“暂停”和“停止”。
3)按“开始”启动监视,按“停止”终止监视,WPE PRO会自动弹出一个窗口来显示记录下来的通信数据包。
var comm:TcommBlock;
begin
idudp.Host:=edit1.Text; //远端服务器地址
idudp.Port:=StrToInt(edit3.Text); //远端服务器端口
comm.Msg:=edit2.Text;
idudp.SendBuffer(comm,sizeof(comm));
showmessage(IntToStr(sizeof(comm))); //我又加了这么一句end;
----------------------------------------------
令我吃惊的是,虽然我只是传了一个“你好”
showmessage出来的长度却是276
这是怎么回事?????
DDGG(叮叮当当),再进来看看阿
Msg :char[255]; //命令体
end;
改成
idudp.SendBuffer(comm,length(comm));
试试.
SendBuffer(.....sizeof(comm)),发送了很多错误的字符。
--------------->>>>>>>>>>>>>>>>>>>>>
SendBuffer(......,Length(comm.Msg));
或者修改你的包结构:
TCommBlock=record
len:integer;
Msg:string[255];
end;
在程序对comm.Msg赋值的时候,把报文的长度赋值给comm.len,
发送数据的时候:
SendBuffer(.....,comm.len);
>>DDGG(叮叮当当),再进来看看阿我上面已经写了,停止监视后,会自动弹出一个窗口显示监测到的通信数据包记录的。