だから私は、デスクトップアプリケーション(ネットワークでプレイすることになっているゲーム)でSocketとServerSocketを使用するTCP / IPサーバー/クライアントモデルを持っています。
サーバーのリモート IP アドレスを取得して、クライアント アプリケーションが、開かれた特定のポートで開かれたサーバー アプリケーションに接続できるようにする必要があります。
public class ServerConnection {
private int PORT = 8100;
private ServerSocket serverSocket = null;
public void create() throws IOException {
serverSocket = new ServerSocket();
serverSocket.bind(new InetSocketAddress("localhost", PORT));
}
public void close() throws IOException {
serverSocket.close();
}
public ClientConnection acceptRequest() throws IOException {
Socket socket = serverSocket.accept();
return new ClientConnection(socket);
}
public ServerConnection() throws IOException {
}
}
public class ClientConnection {
private String adress = "127.0.0.1";
private int PORT = 8100;
private Socket socket = null;
private PrintWriter out = null;
private BufferedReader in = null;
public ClientConnection() {
}
public ClientConnection(Socket socket) throws IOException {
this.socket = socket;
out = new PrintWriter(socket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
}
public void connect() throws UnknownHostException, IOException {
socket = new Socket(adress, PORT);
out = new PrintWriter(socket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
}
public void close() throws IOException {
if (out != null) {
out.close();
}
if (in != null) {
in.close();
}
if (socket != null) {
socket.close();
socket = null;
}
}
public void send(String request) {
if (socket != null) {
out.println(request);
}
}
public String receive() throws IOException {
if (socket != null) {
return in.readLine();
}
return null;
}
}
ローカルホストでも問題なく動作しますが、どこでも (サーバーとクライアント) 実行できるようにしたいと考えています。したがって、サーバーが現在のリモートIPであることを確認する方法が必要です。ユーザーは通信回線(IM、電子メールなど)を介して送信し、その後クライアントはアドレスを入力してサーバーに接続します。したがって、1 つのアプリケーションがサーバーまたはクライアントの両方として機能できるため、継続的に実行されてクライアントにサービスを提供する安定したサーバー アプリケーションは必要ありません。