ClientSocket 再次连接的问题

xwm21cn 2003-12-09 07:10:58
我用控件TClientSocket去连接服务端,非阻塞方式
第一次ClientSocket1.Active := True是成功的
当我需要断开,执行 ClientSocket1.Active := False 后,
再次需要连接,执行 ClientSocket1.Active := True 后,值仍然是false,也没捕捉到错误,
只有再次 执行ClientSocket1.Active := True才会成功,奇怪!

我用阻塞方式时没有这个问题,但OnRead上又不能读到消息,需要另外写线程去接收.

请各位大侠出手!
...全文
17 点赞 收藏 11
写回复
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
CaoChengLu 2003-12-17
请提供有问题的源代码,大家也好分析问题的根源
回复
halfdream 2003-12-15
同意楼上的,
在非阻塞方式下面,OPEN和CLOSE都是异步操作。
一般的做法可以用一个消息处理循环等待它。

Clientsocket.Close;//或者ClientSocket.Active:=false;一样。。
while ClientSocket.Active then
begin
Application.processmessages;
end;

OPEN时候做法也一样。

回复
zaiai2003 2003-12-15
非阻塞方式,客户端发送完数据后(当前为建立连接)直接执行其他的语句。对于你这种情况,可以说是你在客户端建立连接后,下一条语句直接执行。所以,检测连接状态时很有可能还是false。一般而言,服务器端需要同时服务于多个客户端,所以它的监听进程不会做到实时响应,这样当你在客户端建立连接后,直接测试是否连接的状态一般情况下都是false。
回复
ske3 2003-12-15
学习中
回复
xwm21cn 2003-12-15
局域网或客户端服务器均在本机
回复
npu125 2003-12-14
甚麽网络环境
回复
xwm21cn 2003-12-13
用ClientSocket1.Open与ClientSocket1.Close结果是一样的,:(
回复
soundbug 2003-12-10
ClientSocket1.Open与ClientSocket1.Close来试试看
回复
wave_f 2003-12-10
楼主是怎么样连接的,是通过运行程序时程序实现连接,还是手工去选择连接
回复
qyyok 2003-12-10
学习中
回复
xwm21cn 2003-12-10
我是需要手工去连接(登录)
回复
发动态
发帖子
网络通信/分布式开发
创建于2007-08-02

1566

社区成员

Delphi 网络通信/分布式开发
申请成为版主
社区公告
暂无公告