IdTCPServer与ClientSocket之间的通讯问题(100分)

  • 主题发起人 主题发起人 gsw
  • 开始时间 开始时间
G

gsw

Unregistered / Unconfirmed
GUEST, unregistred user!
近来做个东东,对方用的是ClientSocket,我用的是IdTCPServer,两个控件能连接成功,但ClientSocekt发送数据,IdTCPServer1收不到,谁能帮一下!
 
数据封装协议不一样。收到也是乱的
 
难道没有解决办法吗?
 
应该都可以收到数据信息,应该是你接收的问题
 
连接正常,接收时接不到,什么提示都没有呀?
 
建议你使用TcpServer1.
我曾经使用TcpServer1和另外的软件通讯。和你的应用相似。另外,需要看另外的软件对信息流是不是使用了其他的处理。
还有,你怎么判断连接成功了?
 
to zywcd
在连接事件中能知道连接成功了,就是服务端读不到客户端.后来用readstring(len),能读到,但读的是len这个长度的字符串,多了少了都不行.
 
对方是使用什么软件开发的?
我上次一个软件,对方使用vc写的,把发送的字符串进行了序列化处理,
最后没法,使用delphi仿照vc也做了一个序列化,才成功进行了信息交换。
如果需要序列化,这段代码供你参考
//模拟VC的序列化过程.
//同时返回应该发出去的命令串字节长度.
function Serialize(var pp:array of char):integer;
var i:integer;
length:integer;
sum:Longword;
no:PInteger;
begin
no:=@pp[0]; //命令串前四个字符为长度.
length:=no^; //获取长度.
//计算校验码,...但是不包括表示长度的4个字节。
sum:=0;
for i:=sizeof(integer)+1 to length+sizeof(integer) do
sum:=sum+ord(pp[i-1]);
no:=@pp[length+sizeof(integer)]; //存储校验码的位置地址....
no^:=sum; //把校验码存入字符串,
Serialize:=length+sizeof(integer)*2; //包括长度的个字节,以及校验码4个字节的命令串长度.
end;
 
这也不叫什么序列化
 
大侠们,能给解决一下吗?
 
后退
顶部