私はこの単純なマルチスレッドJavaソケットアプリケーションを持っています。その後、クラスClient.javaシンプルなJavaマルチスレッドソケットアプリケーション
public class Client {
private static Socket socket;
private static boolean waitForServer = false;
public static void main(String[] args) throws IOException {
while(true){
socket = new Socket("localhost", ServerPortInfo.getPort());
PrintWriter printWriter = new PrintWriter(socket.getOutputStream(), true);
BufferedReader bufferedReader = new java.io.BufferedReader(new InputStreamReader(System.in));
while(true){
PrintWriter.println(name + " Hello");
waitForServer = true;
if (waitForServer){
BufferedReader inputBufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String inputString = null;
while((inputString = inputBufferedReader.readLine()) != null){
System.out.println(inputString);
break;
}
}
}
}
}
}
そしてServer.java
および接続...
public class ServerThread extends Thread {
private static Socket socket;
public static boolean alive = true;
ServerThread(Socket socket){
this.socket = socket;
}
public void run(){
if (alive) {
//DO STUFF NOW
}
}
そして今、私は複数の接続を持っていることを扱うスレッドを使用します。接続ごとに異なるThreadを作成します。 ユーザーがこのサーバーから切断したい場合はどうすればよいですか?
スレッド、ソケットを殺すべきですか?
スレッド alive = false;
にちょうど言ってみましたので、実行が停止します。しかし、これは他の接続も破壊します。
EDIT
ServerThread - >
private Socket socket;
と機能 - 魔法のように>
void closeConnection() throws IOException{
this.socket.close();
}
作品。
ソケットを閉じて、スレッドを強制終了します。 – frozen
このプログラムの目的は何ですか?宿題? –
'public static'変数は、災害のためのレシピです(私はあなたがちょうど難しい方法を見つけたと確信しています)。しかし、@cktangが言ったように、ソケットを閉じてから、そのスレッド(他のスレッドではない)をkillします。 –