我正在使用TTCPBlockSocket
作爲TCP/IP應用程序。問題是我無法確定連接何時丟失。Delphi + Synapse:如何檢查我是否仍然連接
GetLastError
返回0
Read
返回0
但我遇到這些值eaven如果應用程序連接,所以我可以得到它怎麼能當TCP/IP連接丟失,我得到通知。
感謝
我正在使用TTCPBlockSocket
作爲TCP/IP應用程序。問題是我無法確定連接何時丟失。Delphi + Synapse:如何檢查我是否仍然連接
GetLastError
返回0
Read
返回0
但我遇到這些值eaven如果應用程序連接,所以我可以得到它怎麼能當TCP/IP連接丟失,我得到通知。
感謝
由於opC0de說,以檢查客戶端仍連接需要兩個檢查TCPBlockSocket.CanRead(0)和TCPBlockSocket。 WaitingData = 0
function IsSocketAlive(ASocket: TTCPBlockSocket): Boolean;
begin
Result := (ASocket.Socket = INVALID_SOCKET) or ((ASocket.WaitingData = 0) and ASocket.CanRead(0));
end;
我在我的項目中使用這種方式,所以我可以確認它的工作原理。
如果拔下網線,它是否按預期工作? – mjn
我會說['CanRead'](http://synapse.ararat.cz/doc/help/blcksock.TBlockSocket.html#CanRead)函數調用將0作爲'Timeout'參數傳遞給你尋找。此函數內部調用執行Winsock ['select'](http://msdn.microsoft.com/en-us/library/windows/desktop/ms740141(v = vs.85).aspx)函數的'InternalCanRead'。如果發生任何錯誤,CanRead函數將返回False。 – TLama
@TLama我會盡力感謝。 – opc0de
@TLama您的回答讓我走向了正確的路徑,如果TCPBlockSocket.CanRead(0)和TCPBlockSocket.WaitingData = 0斷開連接:= true,必須滿足以下條件才能檢查它是否斷開連接。你可以張貼這個答案讓我接受 – opc0de