我用控件TClientSocket去连接服务端,非阻塞方式
第一次ClientSocket1.Active := True是成功的
当我需要断开,执行 ClientSocket1.Active := False 后,
再次需要连接,执行 ClientSocket1.Active := True 后,值仍然是false,也没捕捉到错误,
只有再次 执行ClientSocket1.Active := True才会成功,奇怪!我用阻塞方式时没有这个问题,但OnRead上又不能读到消息,需要另外写线程去接收.请各位大侠出手!

解决方案 »

  1.   

    ClientSocket1.Open与ClientSocket1.Close来试试看
      

  2.   

    用ClientSocket1.Open与ClientSocket1.Close结果是一样的,:(
      

  3.   

    非阻塞方式,客户端发送完数据后(当前为建立连接)直接执行其他的语句。对于你这种情况,可以说是你在客户端建立连接后,下一条语句直接执行。所以,检测连接状态时很有可能还是false。一般而言,服务器端需要同时服务于多个客户端,所以它的监听进程不会做到实时响应,这样当你在客户端建立连接后,直接测试是否连接的状态一般情况下都是false。
      

  4.   

    同意楼上的,
    在非阻塞方式下面,OPEN和CLOSE都是异步操作。
    一般的做法可以用一个消息处理循环等待它。Clientsocket.Close;//或者ClientSocket.Active:=false;一样。。
    while ClientSocket.Active then
    begin
      Application.processmessages;
    end;OPEN时候做法也一样。