高分求助 郁闷啊~~~关于CLIENTSOCKET的问题(200分)

  • 主题发起人 主题发起人 seilfer
  • 开始时间 开始时间
S

seilfer

Unregistered / Unconfirmed
GUEST, unregistred user!
帮我看看这段代码
if not ClientSocket2.Active then
begin
ClientSocket2.Address := ServerIp;
ClientSocket2.Port := ServerPort;
ClientSocket2.open;
{if not ClientSocket2.Active then
showmessage('111');}
LenCode := ClientSocket2.Socket.SendBuf(CheckSocketText,272);
if LenCode <> 272 then
begin
showmessage('发送失败');
writelog('报文长度不符合');
end;
这段代码运行第一次的时候 ClientSocket2.Socket.SendBuf(CheckSocketText,272)返回0
运行第二次的时候发送就正常了,以后的也正常。
如果把我注释的那段加上 也就是
{if not ClientSocket2.Active then
showmessage('111');}
第一次发送也可以成功了! 为什么?! 只是加了一个SHOWMESSAGE啊,如果是时间延迟的问题,我SLEEP多少都不成。而且是 if not ClientSocket2.Active 看SERVER端OPEN后确实是建立连接了 ,为什么ACTIVE还是FALSE
 
我感觉就是传输时间问题
我也加一个对话框 提示连接成功
这样就不会导致连接失败

至于SLEEP 我不知道他延时时 程序是否继续在运行
 
我也觉得应该是时间的问题,我跟程序SLEEP时确实是在延时5秒后才发送的,如果不想要对话框该怎么写啊?
 
sleep延时的时候整个程序都停了。

我正在帮你测试程序
 
SLEEP會停止當前線程,你最好用Application.ProcessMessage, 加個循環!
 
好像 ClientSocket.open需要一定的时间 所以不能把SendBuf写在open之后,可以将
LenCode := ClientSocket2.Socket.SendBuf(CheckSocketText,272);
if LenCode <> 272 then
begin
showmessage('发送失败');
writelog('报文长度不符合');
end;
这一段写在连接成功后的事件里面 ClientSocket1Connect
 
果然, 估计是SLEEP停止了当前线程, 问题是由延时引起的
加上 while i<100 do
begin
i:=i+1;
Application.ProcessMessages;
end;
就可以了,下班前就结贴,谢谢各位了:)
 
多人接受答案了。
 
后退
顶部