java群聊_Java-->实现群聊功能(C/S模式--TCP协议)

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();

}

}

}

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值