packagecom.dragon.java.tcpchat;importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;importjava.io.PrintStream;importjava.net.InetAddress;importjava.net.Socket;importjava.util.List;/*** 处理每个(单个)连接到服务器的客户端的线程
*
*@authorAuser
**/
public class HandleSocket extendsThread {privateSocket socket;private Listlist;/*** 构造方法
*
*@paramsocket
* 当前连接的客户端
*@paramlist
* 存储已连接客户端的集合*/
public HandleSocket(Socket socket, Listlist) {this.socket =socket;this.list =list;
}/*** 线程run方法*/@Overridepublic voidrun() {
InetAddress address= socket.getInetAddress(); //获取连接到服务器的这的客户端的地址
String ip =address.getHostAddress();
System.out.println(ip+ "上线了!");if (ip.equals("192.168.1.117")) {synchronized(list) {
sendToAll(ip+ "由于违规操作,已被拉入黑名单!");
list.remove(socket);
}return;
}try{
BufferedReader br= new BufferedReader(newInputStreamReader(
socket.getInputStream(),"gbk"));
String line= "";while ((line = br.readLine()) != null) {
String msg= ip + ":" +line;
System.out.println(msg);//输出到服务器端的控制台//把这个客户端说的话,发给其他所有的客户端
sendToAll(msg);
}
}catch(IOException e) {//e.printStackTrace();
System.out.println(ip + "下线了!");synchronized(list) {
list.remove(socket);
}
}
}/*** 把信息发送给所有的客户端,去除当前socket
*
*@parammsg
* 发送的信息*/
private voidsendToAll(String msg) {synchronized(list) {for(Socket s : list) {if (s !=socket) {try{
PrintStream ps= newPrintStream(s.getOutputStream());
ps.println();
}catch(IOException e) {
e.printStackTrace();
}
}
}
}
}
}