我需要用ClientSocket与服务器连接进行通讯.代码大概是这样的:
TClientSocket * ctskt=NULL;
ctskt = new TClientSocket(NULL);
ctskt->Active = false;
ctskt->Address = 省略;
ctskt->Port = 省略;
下面在一个方法里有这样的代码:
AnsiString messageinfo = "Hello!";
ctskt->Open();
ctskt->Socket->SendText(messageinfo);
每次调用这个方法的时候第一次服务器都没有收到消息,但第二次调用就有了,我加了调试代码在Open()和SendText()后,发现第一次调用该方法后该Socket一直是false的,但为什么第二次调用发数据就能收到呢?我用的是CB6,在CB版块没有高手参与,请这边的大虾帮忙解决,在线等待!而且这里面Catch不到任何异常,使用ctskt->Active = True;代替Open(),结果一样不行!.....急急急!
TClientSocket * ctskt=NULL;
ctskt = new TClientSocket(NULL);
ctskt->Active = false;
ctskt->Address = 省略;
ctskt->Port = 省略;
下面在一个方法里有这样的代码:
AnsiString messageinfo = "Hello!";
ctskt->Open();
ctskt->Socket->SendText(messageinfo);
每次调用这个方法的时候第一次服务器都没有收到消息,但第二次调用就有了,我加了调试代码在Open()和SendText()后,发现第一次调用该方法后该Socket一直是false的,但为什么第二次调用发数据就能收到呢?我用的是CB6,在CB版块没有高手参与,请这边的大虾帮忙解决,在线等待!而且这里面Catch不到任何异常,使用ctskt->Active = True;代替Open(),结果一样不行!.....急急急!
ctskt->Socket->SendText(messageinfo);
这两句连在一起使用时,是肯定不会发送的,如果你想连接成功就发送,把它放到Connect事件里面发送
ctskt->Socket->SendText(messageinfo);
,如果我把该Open(),放到别的地方,就会触发事件.
另外,我的那个Open()方法调用的地方是一个回调函数,即有可能被多线程调用,这个没影响吧,线程安全我已经考虑到了,请大虾们再帮帮忙.单位要程序很急啊,谢谢大家了.
我现在的问题是,我调用了Open()后,一直无法真正建立连接,即ClientSocket的onconnect事件一直无法触发.和平时唯一不太一样的地方是,我调用Open()的函数,是一个被多线程函数调用的回调函数.难道是这个原因,导致onconnect事件不能触发吗?因为我在别的地方(比如一个按狃)调用Open(),都可以触发onconnect事件的........有什么办法解决吗?
即
Application.ProcessMessages;
sleep(200);
cltsck.open();
while True do
begin
sleep(10);
if cltsck.Active=True then
cltsck.sendtext('The string ......');
end;
cltsck.open();
Application.ProcessMessages;cltsck.sendtext('The string ......');