我在網絡上運行我的應用程序,並且在某些情況下客戶端失去了與服務器的連接。在這段時間之後,當我想向服務器發送一條消息時,我收到以下錯誤:在未連接的套接字上不允許操作(類似這樣的事)。C#客戶端 - 服務器應用程序問題
我想創建對象類型的TcpClient的事件,並且當tcp_obj.Connected = false以調用一個函數來中止當前的代碼的執行。我怎麼能這樣做?
或給我其他suggestios。
謝謝。
我在網絡上運行我的應用程序,並且在某些情況下客戶端失去了與服務器的連接。在這段時間之後,當我想向服務器發送一條消息時,我收到以下錯誤:在未連接的套接字上不允許操作(類似這樣的事)。C#客戶端 - 服務器應用程序問題
我想創建對象類型的TcpClient的事件,並且當tcp_obj.Connected = false以調用一個函數來中止當前的代碼的執行。我怎麼能這樣做?
或給我其他suggestios。
謝謝。
我知道至少從套接字編程在Java中,當客戶端斷開連接到服務器,服務器不會也不可能知道這件事。您需要某種心跳來檢測早期斷開連接。
我們經常在我們的客戶機/服務器應用程序,以檢測早期斷開,並記錄他們的服務器上使用心跳。這樣服務器可以關閉關聯的套接字並將連接釋放回池中。
只需向客戶端定期發送命令並等待響應。如果在超時時間內沒有收到響應,則假定斷開連接並關閉流。
在嘗試發送消息之前,我只是首先檢查您的連接對象以確保您已連接。另外,請確保您將發送邏輯放在try-catch中,這樣,如果您碰巧斷開了中間傳輸,您將可以繼續進行,而不會將應用程序分開。
僞代碼:
private void SendMessage(string message, Socket socket)
{
if(socket.connectionState = States.Connected)
{
try{
// Attempt to Send
}
catch(SocketException Ex)
{
// Disconenct, Additional Cleanup Etc.
}
}
}
如果你在C#中,之前您的連接狀態改變,你將有一個插座中拔出事件火,你的連接狀態改變之前。確保您在套接字連接後立即啓用此事件。
我們可以知道爲什麼使用TCP套接字嗎?用於調用一個tcp設備o服務器代碼?
我建議你,如果是調用.NET服務器應用程序中使用Windows通訊基礎溫度。這是通過簡單的net.tcp,HTTP等
問候公開服務,
其實這是一個非常古老的問題,
如果我正確理解你的問題,你需要一種方法來了解是否你的應用程序仍然連接到服務器,反之亦然。
如果是這樣,然後一個解決方法是有一個UDP連接只是爲了檢查連接(我知道的開銷,但它更好地輪詢連接狀態),你可以在你發送數據之前檢查。
由於UDP不是面向連接的,所以在發送數據時不需要連接
如何創建一個TCP斷開連接的事件觸發器?你可以給我一個例子嗎? – Emanuel 2010-01-15 21:05:33