クラスSocketを拡張するクラスClientSocketがあります。クラスSocketを拡張する理由は、ソケットの反対側にあるクライアントを一意に識別するStringclientIdを含めたいためです。clientIdを返す「getClientId」というメソッドもあります。
次のようなソケット接続を受け入れる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メソッドは実行時にClientSocketではなくSocketオブジェクトを返すため、これを行うことはできません。私の質問は、これを回避する方法はありますか?そうでない場合は、クライアントにバインドされているソケットを一意に識別できる、私がやりたいことを実行するためのより適切な方法はありますか?IPアドレスは変更される可能性があります。
助けてくれてありがとう。