1

出于好奇,如果 TServerSocket/TClientSocket 是 ThreadBlocking 类型,会触发哪些事件?

4

1 回答 1

5

TClientSocket在阻塞模式下会触发除OnRead和之外的所有事件OnWrite。此外,OnDisconnect仅当客户端关闭自己的套接字端时,才会在远程断开连接时触发该事件。读取/写入数据的代码负责检测这些套接字状态。可读性是通过TWinSocketStream.WaitForRead()或 WinSockselect()函数检测的。仅通过 WinSockselect()函数检测可写性。通过首先检测可读性然后TCustomWinSocket.ReceiveBuf()TWinSocketStream.Read()返回 0 来检测远程断开连接。

TServerSocket默认情况下,在阻塞模式下会触发其所有事件。但是,如果您从中派生一个TServerClientThread覆盖虚拟ClientExecute()方法的类,然后从事件中返回该类的实例OnGetThread,那么您将丢失OnReadOnWrite事件,并且必须使用与TClientSocket阻塞模式类似的逻辑来检测这些套接字状态。

于 2013-02-19T22:55:03.590 回答