出于好奇,如果 TServerSocket/TClientSocket 是 ThreadBlocking 类型,会触发哪些事件?
user1803300
问问题
708 次
1 回答
5
TClientSocket
在阻塞模式下会触发除OnRead
和之外的所有事件OnWrite
。此外,OnDisconnect
仅当客户端关闭自己的套接字端时,才会在远程断开连接时触发该事件。读取/写入数据的代码负责检测这些套接字状态。可读性是通过TWinSocketStream.WaitForRead()
或 WinSockselect()
函数检测的。仅通过 WinSockselect()
函数检测可写性。通过首先检测可读性然后TCustomWinSocket.ReceiveBuf()
或TWinSocketStream.Read()
返回 0 来检测远程断开连接。
TServerSocket
默认情况下,在阻塞模式下会触发其所有事件。但是,如果您从中派生一个TServerClientThread
覆盖虚拟ClientExecute()
方法的类,然后从事件中返回该类的实例OnGetThread
,那么您将丢失OnRead
和OnWrite
事件,并且必须使用与TClientSocket
阻塞模式类似的逻辑来检测这些套接字状态。
于 2013-02-19T22:55:03.590 回答