简单Java多线程套接字应用程序
我有一个简单的多线程java套接字应用程序。使用类Client.java简单Java多线程套接字应用程序,java,multithreading,sockets,networking,Java,Multithreading,Sockets,Networking,我有一个简单的多线程java套接字应用程序。使用类Client.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("localhos
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 Server {
public static ArrayList<ServerThread> connections = new ArrayList<ServerThread>();
public static void main(String[] args) throws IOException, SQLException, ClassNotFoundException {
// Init server functionality
new Server().runServer();
}
// Implementing server functionality
public void runServer() throws IOException{
ServerSocket serverSocket = new ServerSocket(ServerPortInfo.getPort());
System.out.println("Server is running... Waiting for connections");
while (true){
Socket socket = serverSocket.accept();
// After connection handle clients in threads
ServerThread newThread = new ServerThread(socket);
connections.add(newThread);
newThread.start();
}
}
}
现在,当我有多个连接时。它为每个连接创建不同的线程。
当用户想要断开与此服务器的连接时,我应该怎么做
我应该把线弄断吗,插座
我试着对线程说
alive=false代码>因此运行将停止运行。但这也破坏了其他联系
编辑
服务器线程->
private Socket socket;
和一个函数->
void closeConnection() throws IOException{
this.socket.close();
}
工作起来很有魅力
公共静态变量会导致灾难(我相信您已经知道了)
刚发现困难的方法)。但正如@cktang所说,关闭插座,
然后杀死该线程(而不是其他线程)-@约克
更改了专用静态套接字代码>至专用插座代码>。
关闭套接字,然后执行线程。问题在于
public static boolean alive = true;
private static Socket socket;
由于它是静态的,它会影响所有ServerThread
,但每个ServerThread
(也称为连接的客户端)都应该有自己的套接字和标志,指示它是否处于活动状态
从属性和属性中删除静态
修饰符
使标志
private volatile boolean alive=true代码>
首先关闭套接字a,然后停止线程(并将其从列表中删除)。关闭套接字,然后终止线程。此程序的目的是什么?家庭作业?publicstatic
变量会导致灾难(我相信你刚刚发现了困难的方向)。但正如@cktang所说,关闭套接字,然后杀死该线程(而不是其他线程)。@randnum-1这是可行的,我甚至尝试过,但由于Joe C提到的静态变量,这无法正常工作。很快重写,现在就可以了。@AbhijitSarkar遗憾的是,我们没有在我的大学里学习sockets,所以我只是在教育自己加入投资组合。所以不,这不是家庭作业。
public static boolean alive = true;
private static Socket socket;