簡體   English   中英

ServerSocket接受方法 - 如何向下轉換為子類類型?

[英]ServerSocket accept method - How can I down cast to a subclass type?

我有一個類ClientSocket,它擴展了類Socket。 我擴展類Socket的原因是我想要包含一個String clientId,它唯一地標識套接字另一端的客戶端。 我還有一個名為'getClientId'的方法,它返回clientId。

我在我的服務器上運行的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地址可能會有所變化。

謝謝您的幫助。

您可以擁有一個ServerClientSocket,它從accept接收ClientSocket。 就像是

public class ServerClientSocket extends ServerSocket {
  public ClientSocket accept() throws IOException {
  if (isClosed())
    throw new SocketException("Socket is closed");
  if (!isBound())
    throw new SocketException("Socket is not bound yet");
  ClientSocket s = new ClientSocket((SocketImpl) null);
  implAccept(s);
  return s;
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM