因为项目需要,把某个DELPHI写的通信协议专用C++编写发送,

结果登录时服务器总是提示C++发送的用户名密码有错误

delphi中的协议字段userpwd类型为string[20];

刚开始c++的定义为char userpwd[21];

现在加设userpwd的内容为“abcd”

那么C++代码strcpy(c.userpwd, "abcd"); 这样发送,服务器解析密码错误

后来又跟踪了DELPHI的代码,

发现原来delphi的string类型第一个字节表示字符串的长度,

delphi的d.userpwd[0] = $04;(“abcd”长度为4)

所以d.Userpwd字符串从0位置开始的的内容为$4+'abcd'

 

而c++则也'/0’表示字符串的结束.

因此上面的代码应该对应修改为

strcpy(c.userpwd + 1, "abcd");

c.userpwd[0]= 0x04;

 

这样发送的内容才能与DELPHI封包的内容一致。

 

 

posted on 2011-03-08 16:01  zdleek  阅读(9)  评论(0)    收藏  举报  来源