リモートコンソールを介して対話できるように、ミニクラフトサーバーへのソケットを開く小さなプログラムを作成しようとしています。
Java ソケットの基本的な操作方法は理解できましたが、コンソールからユーザー入力を取得したり、構成ファイルを読み取ったりする作業を行っている間、ソケットをバックグラウンドで実行し続ける簡単な方法がわかりません。
私が見たいくつかの例では、スレッドを使用し、ソケットをサーバーに接続したままにするためだけにネットワーク スレッドを作成していました。
スレッドを動作させようとすると、プログラムは実行されますが、すぐにスレッド 1 (私が作成したスレッド) に切り替わり、スレッド 0 が中断されて待機するように指示されているため、テスト行が出力されません。
私は本当にスレッド化を完全に理解していないので、それで少し途方に暮れています。しかし、何かを簡単にする方法がわかりません。何か案は?
これは私がこれまでに行ったコードです。それほど多くはありませんが、役立つかもしれません。
package com.solignis.rcon;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.Socket;
public class Connection extends Thread {
private InetSocketAddress serverAddress;
private int timeout;
private Socket socket;
public Connection(String par1, int par2) {
serverAddress = new InetSocketAddress(par1, par2);
}
@Override
public void run() {
socket = new Socket();
try {
socket.connect(serverAddress, timeout);
} catch (IOException e) {
e.printStackTrace();
}
while(socket.isConnected()) {
}
}
public void connect() {
this.run();
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Connecting to " + serverAddress.toString());
if(socket.isConnected()){
System.out.println("Connection established");
}else{
System.out.println("Connection failed");
}
}
public void disconnect() {
this.notify();
try {
socket.close();
} catch (IOException ie) {
ie.printStackTrace();
}
}
}