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