基于java网络编程实现的群聊(简易版)

该文章介绍如何通过Java实现一个简单的群聊系统,基于网络编程的基础,通过Socket和多线程技术,服务器端接收信息并转发给所有客户端,从而达到多用户间的消息传递。客户端和服务器端分别通过启动类运行,当发送特定退出命令(如“再见”)时,会退出群聊。
摘要由CSDN通过智能技术生成

        要实现网络编程首先要实现单发单收,在单发单收的基础上使用多线程使其实现多发多收。然后在此基础上进行改进,以实现“群聊”的功能。实现思路是这样的,由于发送消息的本质是将消息发送给服务器,如果我们在服务器端实现将收到的信息转发给所有的用户,然后每一个用户在进行 “群聊”时都可以接收到由服务器转发过来的其他用户的信息,即可实现群聊的功能。

        我们直接用代码实现:

        服务器端:

public class getThread extends Thread{

    private Socket socket;

    public getThread(Socket socket) {
        this.socket = socket;
    }

    @Override
    public void run() {
        try {
            InputStream inputStream = socket.getInputStream();
            DataInputStream dataInputStream = new DataInputStream(inputStream);
            System.out.println(socket.getInetAddress().getHostAddress()+"进入连接");
            while(true){
                String s = dataInputStream.readUTF();
                System.out.print(socket.getInetAddress().getHostAddress()+":");
                System.out.println(s);
                send(s);
            }
        } catch (Exception e) {
            get.list.remove(socket);
            System.out.println(socket.getInetAddress().getHostAddress()+"退出连接");
        }
    }

    private void send(String s) throws Exception{
        for (Socket listSocket : get.list) {
            OutputStream outputStream = listSocket.getOutputStream();
            DataOutputStream dataOutputStream = new DataOutputStream(outputStream);
            dataOutputStream.writeUTF(s);
            dataOutputStream.flush();
        }
    }
}

        这里我们使用多线程来装载我们的服务器,我们再创建一个启动类:

public class get {

    public static List<Socket> list = new ArrayList<>();
    public static void main(String[] args) throws Exception {
        ServerSocket socket = new ServerSocket(6666);
        while (true) {
            Socket accept = socket.accept();
            list.add(accept);
            new getThread(accept).start();
        }
    }

}

        至此我们的服务器就搭建好了,我们来编写客户端:

public class sentThread extends Thread{
    private Socket socket;

    public sentThread(Socket socket) {
        this.socket = socket;
    }

    @Override
    public void run() {
        try {
            InputStream inputStream = socket.getInputStream();
            DataInputStream dataInputStream = new DataInputStream(inputStream);
            System.out.println(socket.getInetAddress().getHostAddress()+"进入连接");
            while(true){
                String s = dataInputStream.readUTF();
                System.out.print(socket.getInetAddress().getHostAddress()+":");
                System.out.println(s);
            }
        } catch (Exception e) {
            get.list.remove(socket);
            System.out.println(socket.getInetAddress().getHostAddress()+"退出连接");
        }
    }
}

        我们再创建一个启动类以启动客户端:

        

public class sent {
    public static void main(String[] args) throws Exception {
        Scanner sc = new Scanner(System.in);
        Socket s = new Socket(InetAddress.getLocalHost(), 6666);
        new sentThread(s).start();
        OutputStream outputStream = s.getOutputStream();
        DataOutputStream dataOutputStream = new DataOutputStream(outputStream);
        while (true) {
            String st = sc.next();
            dataOutputStream.writeUTF(st);
            if (st.equals("再见")) {
                break;
            }
        }
        dataOutputStream.close();
        s.close();

    }
}

        至此,只需要分别启动服务端、服务端启动类、客户端和客户端启动类即可实现“群聊”。而在其中我们添加了一个判断语句,如果检测到发送“再见”,就会退出“群聊”。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值