ClientSocket 再次连接的问题

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

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

请各位大侠出手!
...全文
94 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
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
  • 打赏
  • 举报
回复
我是需要手工去连接(登录)

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧