0
我有一個擴展類Socket的類ClientSocket。我擴展類Socket的原因是我想包含一個String clientId,它唯一標識套接字另一端的客戶端。我也有一個名爲'getClientId'的方法返回clientId。ServerSocket接受方法 - 如何將其轉換爲子類型?
我有我的服務器上運行的ServerSocket實例接受像這樣的套接字連接:
public Socket acceptNextConnection() throws IOException {
Socket socket = serverSocket.accept();
// put the client socket into the map
ClientSocket clientSocket = (ClientSocket) socket;
clientConnections.put(clientSocket.getClientId(), clientSocket);
return clientSocket;
}
正如你所看到的,在這裏我的演員是不正確的,一個Socket實例不是ClientSocket的實例,所以我得到正如我所預料的那樣,類別強制性例外。如代碼所示,我想在類ClientSocket上調用'getClientId'。但是我不能這樣做,因爲serverSocket.accept方法在運行時返回一個Socket對象,而不是ClientSocket。我的問題是,有沒有辦法解決這個問題?如果沒有,是否有一種更好的方式來做我想做的事情,哪種方法能夠唯一地識別綁定到客戶端的套接字?一個IP地址可能會改變。
感謝您的幫助。
嗨,彼得。謝謝回覆。我在想這個。這是一個安全的選擇嗎?我知道'接受'可以拋出一些例外,但我是否採用上述方法覆蓋了所有途徑?另外,我不確定我是否理解ClientSocket實例化部分。你能解釋(SocketImpl)類型,還有'implAccept'方法嗎?非常感謝 – Joeblackdev 2011-03-08 13:12:56
道歉,我剛剛發現'implAccept()',這很有道理。謝謝! – Joeblackdev 2011-03-08 14:04:44
我拿了accept()方法的一個副本,並做了最少的更改。理想情況下,您可以刪除參數,因爲您的構造函數不必與Socket的相同。 – 2011-03-08 14:12:50