套接字编程-Java简易聊天室
学习完java网络编程这块,就简单写了个socket实现的简易聊天室。
主要是分成一个服务器端和(多个)客户端,其中服务器端只作为一个转发器,将客户端发送的消息发送回客户端,其中封装了一个实现了runnable接口的channel类来表示客户端的通道。
一个channel通道代表一个客户端线程,用一个CopyOnWriteArrayList容器来管理channel,可以遍历这个容器里的所有客户端通道,实现群聊功能。
具体代码如下:
/**
* @description:
* 服务器端,作为一个转发器
*/
public class Server {
//管理Channel的容器
public static CopyOnWriteArrayList<Channel>all=new CopyOnWriteArrayList();
public CopyOnWriteArrayList<Channel> getAll(){
return Server.all;
}
//main方法
public static void main(String[] args) throws IOException {
//1.创建服务器端的ServerSocket,指明自己的端口号
ServerSocket ss=new ServerSocket(8899);
System.out.println("------服务器------");
while (true){
Socket socket=ss.accept();
Channel c=new Channel(socket);
all.add(c);
new Thread(c).start();
}
}
/**
* Channel表示客户端通道
*/
public class Channel implements Runnable{
//属性(套接字,输出流,输入流) 因为要实现转发信息
private Socket socket;
private DataInputStream dis;
private DataOutputStream dos;
private boolean isRunning=true;
private String name;
//构造器
//打开输出流,输入流
public Channel(Socket socket) {
this.socket=socket;
try {
dis=new DataInputStream(socket.getInputStream());
dos=new DataOutputStream(socket.getOutputStream());
//获取该客户端的名字
this.name=receive();
//发送欢迎信息
this.send("欢迎加入聊天室");
sendOthers(name+"加入了聊天室",true);
} catch