2016-05-31 90 views
0

我有一臺服務器和許多客戶端。我的客戶通過服務器發送消息。如果客戶端連接到服務器,我的服務器將此客戶端的套接字引用放到Sock數組中。如果另一個客戶端向此第一個客戶端服務器發送消息,則檢查第一個客戶端是否使用布爾數組連接到服務器,如果它處於聯機狀態,則使用陣列中的套接字引用將消息發送到第一個客戶端,否則將消息發送到數據庫。 每個客戶端在註銷到服務器之前都會發送關閉信號,以便它可以更新布爾數組。但是如果第一個客戶端的Internet連接突然關閉,那麼數組中的布爾變量仍然是true。爲此,我想在服務器中檢查布爾數組,如果數組中的任何索引爲真,我想檢查對應於它的套接字是否打開。我應該使用什麼套接字方法 - socket.isConnected()或socket.isClosed()或其他方法?互聯網連接突然熄滅時套接字會發生什麼變化?

+0

'如果第一個客戶端的互聯網連接突然熄滅' - 這是什麼意思?問題在於'互聯網'並不是真正作爲一個可以連接到的實體存在的,所以你無法檢測到它的連接。 –

回答

3

確保連接正常工作的唯一方法是通過定期接收心跳或消息。
isConnectd()這意味着;我有沒有連接和isClosed()這意味着;我打電話給我的電話是close(),但這些不會做你想要的。

+0

如果互聯網連接斷開,我如何使用套接字引用來檢查它是否仍然連接?這個套接字會發生什麼? – abc

+0

@abc就像我說的,唯一的方法是期待一個消息/數據發送給你,如果它沒有發送,你超時套接字連接。 –

+0

現在我正在從我的服務中發出一條線索,它會定期向服務器發送一些消息。但是當服務停止時,這個線程本身並不會停止。如何處理這個,所以如果我的服務停止,服務器套接字超時可能發生。 – abc