我有这个简单的多线程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
}
}
,现在当我有多个连接。它为每个连接创建一个不同的线程。 用户想要从该服务器断开连接时应该怎么做?
我应该杀死线程,套接字吗?
我试着只是说线程 alive = false;
所以运行将停止运行。但是这也打破了其他连接。
编辑
ServerThread - >
private Socket socket;
和一个功能 - >
void closeConnection() throws IOException{
this.socket.close();
}
的作品就像一个魅力。
关闭套接字,然后杀死线程。 – frozen
这个程序的目的是什么?家庭作业? –
'公共静态'变量是灾难的秘诀(因为我相信你刚刚发现了困难的方式)。但正如@cktang所说,关闭套接字,然后杀死该线程(而不是其他)。 –