2011-09-26 84 views
0

我一直在尋找很多例子,例如thisthisthis,但它們都不起作用。我不確定有什麼問題,但是對於我嘗試過的每個示例而言,等待只是被忽略,並且我只在大約1秒內得到標準的未處理的套接字異常,而不管指定的等待時間。 No connection could be made because the target machine actively refused it.如何使用TcpClient設置異步連接的超時時間?

下面是摘錄,以幫助理解:

public void Connect(string host, int port) 
{ 
    tcpClient.BeginConnect(host, port, OnConnect, null); 
} 

private void OnConnect(IAsyncResult async) 
{ 
    tcpClient.EndConnect(async); 
} 

一直在嘗試了一堆不同的例子,但我的客戶端應用程序要麼只是failsfast後個個第二或拋出一個插座例外。 try-catch是否會成爲更好的解決方案,並避免使用WaitHandles?

+0

所有這些例子都應該有效。通過您的代碼使用第一個結束步驟。在調用EndConnect之前,無法獲得套接字錯誤。 – jgauffin

回答

2

錯誤

無連接可以作出,因爲目標機器積極 拒絕它。

通常意味着遠程計算機上的該端口上沒有運行任何內容,或者防火牆的某處阻止了該請求。

有一個

tcpClient.SendTimeout

tcpClient.ReceiveTimeout回答您的具體問題,但它可能不是你的問題在這裏。

+0

是的,我試圖處理連接失敗時,服務器不聽。我只需要使用try-catch來處理這個問題,因爲SendTimeout和ReceiveTimeout也不能解決這個問題。 –