TcpClient 为啥 不触发 TcpClient1Receive 事件~~~
   if (edit1.Text='') or (edit2.Text='') then
   begin
      showmessage('  请入帐号和密码  ')
   end
   else
   begin
     buff:='LOGIN'+edit1.Text+'|'+edit2.Text;
     form1.TcpClient1.sendbuf(buff[1],length(buff));
   end;发出的数据 服务端能收到 但是 服务端发出的数据 客户端必须调用 tcpclient1.ReceiveBuf(buff,3000);
这样很不方便 因为不知道服务端什么时候会发信息给客户端~~ 也就不知道什么时候调用tcpclient1.ReceiveBuf(buff,3000);
而且 当有窗体ShowModal的时候 如果用timer 控件调用 tcpclient1.ReceiveBuf 会出错~~如何 触发Receive事件啊~~~~? 听说必须使用 bmNonBlocking 模式 但是我改为 bmNonBlocking 模式后 就不能触发TcpClient1Connect事件了~~~请教 tcpclient 的bmNonBlocking 如何正确使用()  谢谢啦

解决方案 »

  1.   

    ClientSocket 无法屏蔽 10061错误
      

  2.   

    ClientSocket 无法屏蔽 10061错误
    ------------------
    怎么会呢?procedure TForm1.ClientSocket1Error(Sender: TObject;
      Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
      var ErrorCode: Integer);
    begin
      if ErrorCode = 10061 then
      begin
        //由于目标机器积极拒绝,无法连接。
        ErrorCode := 0;
      end;
    end;
      

  3.   

    TCPClient的非阻塞方式不太管用(至少我是没掌握它的使用方法),要用它的话,就用阻塞方式+线程吧。如果想用非阻塞方式,建议使用TClientSocket。阻塞方式,建议使用Indy组件。
      

  4.   

    用线程,该事件不管用好像,indytcpclient也是一样