我使用这两个类进行通讯,但是无论是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,但没有一个触发,这个问题困绕我一天了。大家帮我解决下!
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,但没有一个触发,这个问题困绕我一天了。大家帮我解决下!
接着又出现 问题了,client 和 server 都工作在blocking模式,当连接建立后为什么不触发onread呢
ClientSocket1.Socket.SendText('adfsfs'); //这里应该触发事件啊你在非阻塞模式下写这样的代码肯定不对了! 或者碰巧触发一下server的onread事件。
原因是这样当你 ClientSocket1.Active := True;执行完这句马上发送数据,但实际上没有连接
上server,故ClientSocket1.Socket.SendText('adfsfs'); 这条发送失败。
如果你换到Client的ONConnect事件去发送就没有问题! 保证你发送出去和触发server的onread事件