iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java实现简单QQ聊天工具
  • 660
分享到

Java实现简单QQ聊天工具

2024-04-02 19:04:59 660人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

Java实现简单的类似QQ聊天工具,供大家参考,具体内容如下 所使用到的知识点: java Socket编程之tcp协议java Swing简单的java多线程 运行截图: 服务

Java实现简单的类似QQ聊天工具,供大家参考,具体内容如下

所使用到的知识点:

运行截图:

服务器端实现:

package tcp_server;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;


public class ServerThread extends Thread{
    private User user;
    public ServerThread(User user){
        this.user = user;
    }
    @Override
    public void run() {
        Map<String, User> userMap = Server.userMap;
        Set<String> keys = userMap.keySet();
        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(user.getSocket().getInputStream()));
            while (true) {
                String value = reader.readLine();// 客户端发来的一句话
                String[] valueAndUser = value.split("@");
                //群聊
                if (valueAndUser.length == 1) {
                    Iterator<String> it = keys.iterator();
                    while (it.hasNext()) {
                        String key = it.next();
                        User u = userMap.get(key);
                        PrintWriter pw = new PrintWriter(u.getSocket().getOutputStream());
                        pw.println(user.getUsername() + ":" + value + "(来自群消息)");
                        pw.flush();
                    }
                } else {
                    //单聊
                    for (int i = 1; i < valueAndUser.length; i++) {
                        String username = valueAndUser[i];
                        User u = userMap.get(username);
                        PrintWriter pw = new PrintWriter(u.getSocket().getOutputStream());
                        pw.println(user.getUsername() + ":" + valueAndUser[0] + "(来自私聊)");
                        pw.flush();
                    }
                }
            }
        } catch (IOException e) {
            System.out.println(user.getUsername()+"下线了");
        }
    }
}
package tcp_server;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.HashMap;
import java.util.Map;


public class Server {
    static Map<String,User> userMap = new HashMap<String, User>();
    public static void main(String[] args) {
        try {
            System.out.println("===server start===");
            ServerSocket server = new ServerSocket(9999);
            while(true) {
                Socket socket = server.accept();

                BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                String username = br.readLine();
                User user = new User(username,socket);
                System.out.println(user.getUsername()+"上线啦");
                userMap.put(username,user);
                ServerThread thread = new ServerThread(user);
                thread.start();
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
}
package tcp_server;

import java.net.Socket;


public class User {
    public User(String username, Socket socket) {
        this.username = username;
        this.socket = socket;
    }
    private String username;
    private Socket socket;

    public User() {
    }

    public String getUsername() {
        return username;
    }

    public Socket getSocket() {
        return socket;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public void setSocket(Socket socket) {
        this.socket = socket;
    }
}

客户端实现:

package tcp_client;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.Socket;


public class ClientReader extends Thread {
    private Socket socket;
    public ClientReader(Socket socket){
        this.socket = socket;
    }
    public void run(){
        try {
            InputStream is = socket.getInputStream();
            InputStreamReader isr = new InputStreamReader(is);
            BufferedReader reader = new BufferedReader(isr);
            for(;;){
                String value = reader.readLine();
                System.out.println(value);
            }
        } catch (IOException e) {
            System.out.println("对不起,服务器崩溃了");
        }
    }
}
package tcp_client;

import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;


public class ClientWriter extends Thread{
    private Socket socket;
    public ClientWriter(Socket socket){
        this.socket = socket;
    }
    public void run(){
        try {
            Scanner input = new Scanner(System.in);
            OutputStream os = socket.getOutputStream();
            PrintWriter pw = new PrintWriter(os);
            while(true) {
                System.out.println("说点什么吧:");
                String msg = input.nextLine();
                pw.println(msg);
                pw.flush();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
package tcp_client;

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.net.Socket;


public class QQFrame extends JFrame{
    private String name;
    private JPanel panel = new JPanel();
    private JTextArea mesgArea = new JTextArea();
    private jscrollPane mesgPane = new JScrollPane(mesgArea);
    private JTextArea speakArea = new JTextArea();
    private JScrollPane speakPane = new JScrollPane(speakArea);
    private JButton sendBtn = new JButton("发送");
    private JButton resetBtn = new JButton("取消");
    private Socket socket;

    public QQFrame(String name){
        super(name);
        this.name = name;
        this.initOther();
        this.initElement();
        this.initSelf();
        this.connectServer();
        this.startReader();
        this.initListener();
    }
    private void connectServer(){
        System.out.println("===client start===");
        try {
            socket = new Socket("127.0.0.1",9999);
            PrintWriter pw = new PrintWriter(socket.getOutputStream());
            pw.println(name);
            pw.flush();
        } catch (IOException e) {
            JOptionPane.showMessageDialog(this,"服务器连接失败");
            //e.printStackTrace();
        }
    }
    private void startReader(){
        //启动"读"线程
        ClientReader reader = new ClientReader();
        reader.start();
    }
    private void initListener(){
        ActionListener listener = new ActionListener() {
            @Override
            public void actionPerfORMed(ActionEvent e) {
                try {
                    OutputStream os = socket.getOutputStream();
                    PrintWriter pw = new PrintWriter(os);
                    String msg = speakArea.getText();
                    if(msg.isEmpty())
                        return;
                    pw.println(msg);
                    pw.flush();
                    speakArea.setText("");
                } catch (IOException ee) {
                    ee.printStackTrace();
                }
            }
        };

        sendBtn.addActionListener(listener);

        resetBtn.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                speakArea.setText("");
            }
        });
    }
    private void initOther(){
        panel.setLayout(null);
        mesgArea.setEditable(false);
        mesgPane.setBounds(10,10,305,220);
        speakPane.setBounds(10,240,305,140);
        sendBtn.setBounds(180,390,60,30);
        resetBtn.setBounds(260,390,60,30);
    }
    private void initElement(){
        panel.add(mesgPane);
        panel.add(speakPane);
        panel.add(sendBtn);
        panel.add(resetBtn);
        this.add(panel);
    }
    private void initSelf(){
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setBounds(1400,220,350,500);
        this.setVisible(true);
    }


    public static void main(String[] args) {
        new QQFrame("乔乔");
        new QQFrame("小红");
        new QQFrame("小明");
    }


    //内部类
    public class ClientReader extends Thread {
        StringBuffer sb = new StringBuffer();
        public void run(){
            try {
                if(socket!=null) {
                    InputStream is = socket.getInputStream();
                    InputStreamReader isr = new InputStreamReader(is);
                    BufferedReader reader = new BufferedReader(isr);
                    for (; ; ) {
                        String value = reader.readLine();
                        sb.append(value + "\n");
                        mesgArea.setText(sb.toString());
                    }
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: Java实现简单QQ聊天工具

本文链接: https://www.lsjlt.com/news/167702.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java实现简单QQ聊天工具
    Java实现简单的类似QQ聊天工具,供大家参考,具体内容如下 所使用到的知识点: java socket编程之TCP协议java Swing简单的java多线程 运行截图: 服务...
    99+
    2022-11-13
  • Unity实现简单的多人聊天工具
    本文实例为大家分享了Unity实现多人聊天工具的具体代码,供大家参考,具体内容如下 代码1 : 服务端代码 using UnityEngine; using System.Net.S...
    99+
    2022-11-13
  • C#实现简化QQ聊天窗口
    本文实例为大家分享了C#实现简化QQ聊天窗口的具体代码,供大家参考,具体内容如下 如图样式,详细步骤如下 整个窗体设置 private void Form1_Load(object...
    99+
    2022-11-13
  • Qt实现简易QQ聊天界面
    本文实例为大家分享了Qt实现简易QQ聊天界面的具体代码,供大家参考,具体内容如下 代码 myDialog.h #ifndef MAINWINDOW_H #define MAINWIN...
    99+
    2022-11-13
  • JavaScript实现简易QQ聊天界面
    本文实例为大家分享了JavaScript实现简易QQ聊天界面的具体代码,供大家参考,具体内容如下 题目: 制作一个简易聊天界面,当用户在界面下方的文本框中输入信息后,点击发送按钮,文...
    99+
    2022-11-13
  • Java实现简单聊天机器人
    本文实例为大家分享了Java实现简单聊天机器人的具体代码,供大家参考,具体内容如下 整个小案例:整合了Java socket编程、jdbc知识(ORM/DAO) 创建数据库和表,准备...
    99+
    2022-11-12
  • java NIO实现简单聊天程序
    本文实例为大家分享了java NIO实现简单聊天程序的具体代码,供大家参考,具体内容如下 服务端 功能: 1、接受客户端连接 2、发送消息 3、读取客户端消息 Server.jav...
    99+
    2022-11-12
  • java实现qq聊天(超详细)
    java语言实践课内容:聊天室小程序或QQ 功能要求: 聊天室:使用图形用户界面,能实现一个聊天室中多人聊天,可以两人私聊。 QQ:实现类似QQ登录、聊天等功能。 注意:有一定等级。完全照搬别人的代码...
    99+
    2023-09-09
    java qq聊天模拟器
  • Java实现简单的聊天室功能
    本文实例为大家分享了Java实现简单聊天室功能的具体代码,供大家参考,具体内容如下 一、客户端的创建 1.我们可以用Socket来创建客户端 public class Client...
    99+
    2022-11-13
  • Java实现简单局域网聊天室
    本文实例为大家分享了Java实现简单局域网聊天室的具体代码,供大家参考,具体内容如下 Java 的Socket编程: 1、TCP协议是面向连接的、可靠的、有序的、以字节流的方式发送数...
    99+
    2022-11-12
  • Qt如何实现简易QQ聊天界面
    这篇文章主要介绍了Qt如何实现简易QQ聊天界面的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Qt如何实现简易QQ聊天界面文章都会有所收获,下面我们一起来看看吧。myDialog.h#ifndef MA...
    99+
    2023-07-02
  • java NIO怎么实现简单聊天程序
    这篇文章主要为大家展示了“java NIO怎么实现简单聊天程序”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“java NIO怎么实现简单聊天程序”这篇文章吧。具体内容如下服务...
    99+
    2023-06-21
  • Java怎么实现简单聊天机器人
    这篇文章主要为大家展示了“Java怎么实现简单聊天机器人”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Java怎么实现简单聊天机器人”这篇文章吧。具体内容如下整个小案例:整合了Java sock...
    99+
    2023-06-20
  • php如何实现聊天工具
    小编给大家分享一下php如何实现聊天工具,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!php实现聊天工具的方法:1、执行函数set_chat_msg;2、在服务器...
    99+
    2023-06-25
  • php怎么实现聊天工具
    本文操作环境:Windows7系统、PHP7.1、Dell G3电脑。php怎么实现聊天工具?PHP实现最简单的聊天室应用介绍聊天应用程序在网上非常常见。开发人员在构建这类应用程序时的选择也很多。这篇文章介绍了如何实现基于PHP-AJAX的...
    99+
    2018-02-11
    php 聊天
  • 安卓android+WebSocket实现简易QQ聊天室
    本篇仅介绍实现聊天室的前端,也就是安卓端代码,后端的实现看链接说明 链接说明 1.后端使用了spring boot 框架,若不熟悉,有关spri...
    99+
    2022-06-06
    websocket Android
  • python实现简单聊天功能
    python的功能确实强大,几行代码就能实现聊天功能 ,供大家参考,具体内容如下 服务端: from socket import socket def main(): #创建套接字对象并指定使用哪种传...
    99+
    2022-06-02
    python 聊天
  • java实现多人聊天工具(socket+多线程)
    大一下学期的java期末课程设计:java实现多人聊天工具,分享一下 课设要求 多人聊天工具 服务器要求1:能够看到所有在线用户(25%) 服务器要求2:能够强制用...
    99+
    2022-11-12
  • Java通过Socket实现简单多人聊天室
    本文实例为大家分享了Java通过Socket实现多人聊天室的具体代码,供大家参考,具体内容如下 Socket可以实现网络上两个程序通过双向通道进行数据的交换,此外它是Java中网络T...
    99+
    2022-11-12
  • Java模拟QQ实现聊天互动程序
    目录介绍功能演示运用到的知识点核心代码服务端客户端介绍 实现的功能、步骤: 1、定义JFrame窗体中的组件 2、在构造方法中初始化窗体的组件 3、使用网络编程完成数据的传输(TCP...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作