套接字编程-Java简易聊天室

本文介绍了一个使用Java套接字编程实现的简易聊天室,通过创建服务器端和多个客户端,服务器端作为消息转发器,将客户端发送的消息广播回所有客户端。每个客户端通过一个实现了Runnable接口的Channel类以线程形式运行,并使用CopyOnWriteArrayList容器管理多个Channel,以实现实时的群聊功能。
摘要由CSDN通过智能技术生成

套接字编程-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 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值