我使用这两个类进行通讯,但是无论是client端还是server端任何事件都不触发实践,连接是肯定建立老的(因为我用一个timer看到RemoteAddress,并且用netstat也可以看到建立连接),但问题就无论如何也除法不了server端的onread,onwrite,onclientconnect等事件.以下是我的代码:client:    ClientSocket1 := TClientSocket.Create(self);
    ClientSocket1.Active := False;
    ClientSocket1.Address := '127.0.0.1';
    ClientSocket1.Port := 7870;
    ClientSocket1.ClientType :=ctNonBlocking;
    ClientSocket1.Active := True;
    ClientSocket1.Socket.SendText('adfsfs');   //这里应该触发事件啊
server:
      payserver := TServerSocket.Create(self);
      payserver.Active := False;
      //payserver.Address := serverip;
      payserver.Host := 'localhost';
      payserver.Port := StrtoInt(serverport);
      payserver.Active := True;
      payserver.ServerType:=stNonBlocking;
为了测试我把所有的事件都设置一个handler,但没有一个触发,这个问题困绕我一天了。大家帮我解决下!

解决方案 »

  1.   

    请参考{$DELPHI}\Source\Vcl\ScktSrvr.dpr
      

  2.   

    对比了,除了他使用的是sckcmp,我使用的是jsocket没什么不通,multhread socket我也试过了,之前我就是这种方式,为了找错我才设置成non-blocking
      

  3.   

    上面的问题是也了,getthread也触发了。
    接着又出现 问题了,client 和 server 都工作在blocking模式,当连接建立后为什么不触发onread呢
      

  4.   

    我指的client为什么不触发onread.
      

  5.   

     ClientSocket1.Active := True;
      ClientSocket1.Socket.SendText('adfsfs'); //这里应该触发事件啊你在非阻塞模式下写这样的代码肯定不对了! 或者碰巧触发一下server的onread事件。
    原因是这样当你 ClientSocket1.Active := True;执行完这句马上发送数据,但实际上没有连接
    上server,故ClientSocket1.Socket.SendText('adfsfs'); 这条发送失败。
    如果你换到Client的ONConnect事件去发送就没有问题! 保证你发送出去和触发server的onread事件
      

  6.   

    谢谢了,我现在把client该成非阻塞, server改成了阻塞.client的onread可以响应服务器的写操作多次,但是为什么client的onwrite只在连接后触发一次后,再也不触发了
      

  7.   

    自己解决了,初学DELPHI没办法
      

  8.   

    自己解决了,初学DELPHI没办法跟你初学任何语言没有多大关系! 主要是了解socket的工作原理!
      

  9.   

    delphi 给winsocket 都加了 wrapper 能一样么。