【发布时间】:2016-05-24 18:34:09
【问题描述】:
我正在使用套接字制作一个简单的聊天程序,并且我有一个 ArrayList 来存储带有套接字和每个连接客户端的用户名的活动对象类,并在这些类中检查套接字是否仍然打开,并调用它如果不是,则要加入自己。
服务器文件踢码:
public synchronized void kick(ClientThread client){
try{
output.printLine("kicking " + client.getUsername());
clients.remove(client);
output.printLine("removed " + client.getUsername());
}catch(Exception e){
e.printStackTrace();
}
output.printLine("kicked ");
}
这是客户端对象在其套接字关闭时调用的内容。
clients 是存储客户端的 ArrayList
client 是我要加入的类对象,client 对象扩展了 Thread
public void run(){
while(true){
try{
Thread.sleep(10);
if(isValid()){
/*bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
if(bufferedReader.ready()){
lastMsg = bufferedReader.readLine();
sendMessage("Hello");
bufferedReader.close();
}*/
}else{
output.printLine(this.getUsername() + " connection closed");
break;
}
}catch(Exception e){
e.printStackTrace();
}
}
server.kick(this);
try {
join();
} catch (InterruptedException e) {
e.printStackTrace();
}
output.printLine("joined " + getUsername());
}
这是来自客户端对象的运行函数,底部是在套接字未连接时运行的代码,它从循环中中断并应该加入它自己,但是它在加入它自己时挂起。客户端已从 ArrayList 中正确删除,但无论我做什么,我都无法让线程加入。
【问题讨论】:
-
应该加入它自己你认为这意味着什么?
标签: java multithreading sockets