纯JAVA模拟、实现QQ简易聊天互动程序

这篇具有很好参考价值的文章主要介绍了纯JAVA模拟、实现QQ简易聊天互动程序。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

实现的功能、步骤:

1、定义JFrame窗体中的组件

2、在构造方法中初始化窗体的组件

3、使用网络编程完成数据的传输(TCP,UDP协议)

4、实现发送按钮的监听点击事件

5、实现回车键发送数据  

功能演示:

没有点发送,数据却发送出去了是因为按了回车键 

编写一个能互动的程序,JAVASE,java,开发语言,tcp/ip,GUI

 运用到的知识点有:

GUI:java实现窗体、Swing。其实JAVA Swing的GUI目前企业中已经不用了,主要是一些学校和培训机构用来教导学生写一些游戏、小项目,练练手的。 

TCP(Transmission Control Protocol):传输控制协议。

 服务端:

注意:一定要先启动服务端,再启动客户端。不然会造成数据丢失

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
//服务端
//注意:一定要先启动服务端,再启动客户端,不然会造成数据丢失
public class QQ简易聊天功能 extends JFrame implements ActionListener, KeyListener {
    public static void main(String[] args) {
        //调用构造方法
        new QQ简易聊天功能();

    }
    //文本域
    private JTextArea jta;
    //滚动条
    private JScrollPane jsp;
    //面板
    private JPanel jp;
    //文本框
    private JTextField jtf;
    //按钮
    private JButton jb;
    //输出流
    private BufferedWriter bw=null;

    //构造方法

    public QQ简易聊天功能(){
        //初始化组件
        jta=new JTextArea();
        //设置文本域不可编辑
        jta.setEditable(false);
        //将文本域添加到滚动条中,实现滚动效果
        jsp=new JScrollPane(jta);
        //面板
        jp=new JPanel();
        jtf=new JTextField(10);
        jb=new JButton("发送");
        //将文本框和按钮添加到面板中
        jp.add(jtf);
        jp.add(jb);

        //将滚动条和面板都添加到窗体中
        this.add(jsp, BorderLayout.CENTER);
        this.add(jp,BorderLayout.SOUTH);
        this.setTitle("QQ聊天服务端");
        this.setSize(300,300);
        this.setLocation(300,300);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);//设置组件显示

        //TCP服务端
        //给发送按钮绑定一个监听点击事件
        jb.addActionListener(this);
        //给文本框绑定一个键盘点击事件
        jtf.addKeyListener(this);
        try{
            //创建一个服务端的套接字
            ServerSocket serverSocket=new ServerSocket(8888);
            //等待客户端的连接
            Socket socket=serverSocket.accept();
            //获取Socket通道的输入流
            //InputStream in=socket.getInputStream();
            BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream()));
            //获取Socket通道的输出流
            bw=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
            //读取数据
            String Line=null;
            while ((Line=br.readLine())!=null){
                jta.append(Line+System.lineSeparator());//拼接后换行
            }
            //关闭serverSocket通道
            serverSocket.close();
        }catch(Exception e){
            e.printStackTrace();
        }
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        //调用发送数据的方法
        data();
    }
    //行为
    @Override
    public void keyPressed(KeyEvent e) {
        //判断是否是回车键
        if(e.getKeyCode()==KeyEvent.VK_ENTER);{
            //发送数据到Socket管道中
            data();
        }
    }

    @Override
    public void keyTyped(KeyEvent e) {
    }
    @Override
    public void keyReleased(KeyEvent e) {
    }
    //定义一个方法,实现发送数据到Socket管道中
    private void data(){
        //获取文本框中的内容
        String text=jtf.getText();
        //拼接需要发送的内容
        text=this.getTitle()+": "+text;//获取发送人的名字和内容
        //发送
        try {
            bw.write(text);
            bw.newLine();//换行
            bw.flush();//刷新
            //发送完后,文本框内应没有内容
            jtf.setText(null);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

 客户端:

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

class 客户端 extends JFrame implements ActionListener,KeyListener{
    public static void main(String[] args) {
        //调用构造方法
        new 客户端();

    }
    //文本域
    private JTextArea jta;
    //滚动条
    private JScrollPane jsp;
    //面板
    private JPanel jp;
    //文本框
    private JTextField jtf;
    //按钮
    private JButton jb;
    //输出流
    private BufferedWriter bw=null;

    //构造方法

    public 客户端() {
        //初始化组件
        jta=new JTextArea();
        //设置文本域不可编辑
        jta.setEditable(false);
        //将文本域添加到滚动条中,实现滚动效果
        jsp=new JScrollPane(jta);
        //面板
        jp=new JPanel();
        jtf=new JTextField(10);
        jb=new JButton("发送");
        //将文本框和按钮添加到面板中
        jp.add(jtf);
        jp.add(jb);

        //将滚动条和面板都添加到窗体中
        this.add(jsp, BorderLayout.CENTER);
        this.add(jp,BorderLayout.SOUTH);
        this.setTitle("QQ聊天客户端");
        this.setSize(300,300);
        this.setLocation(600,300);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);//设置组件显示

        //给发送按钮绑定一个监听点击事件
        jb.addActionListener(this);
        //给文本框绑定一个键盘点击事件
        jtf.addKeyListener(this);
        try {
            //TCP客户端
            //创建一个客户端的套接字(尝试连接)
            Socket socket=new Socket("127.0.0.1",8888);
            BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream()));
            //获取Socket通道的输出流
            bw=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
            //读取数据
            String Line=null;
            while ((Line=br.readLine())!=null){
                jta.append(Line+System.lineSeparator());//拼接后换行
            }
            //关闭Socket通道
            socket.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    @Override
    public void actionPerformed(ActionEvent e) {
        //调用发送数据的方法
        data();
    }
    @Override
    public void keyPressed(KeyEvent e) {
        //判断是否是回车键
        if(e.getKeyCode()==KeyEvent.VK_ENTER);{
            //发送数据到Socket管道中
            data();
        }
    }
    @Override
    public void keyTyped(KeyEvent e) {
    }
    @Override
    public void keyReleased(KeyEvent e) {
    }
    //定义一个方法,实现发送数据到Socket管道中
    private void data(){
        //获取文本框中的内容
        String text=jtf.getText();
        //拼接需要发送的内容
        text=this.getTitle()+": "+text;//获取发送人的名字和内容
        //发送
        try {
            bw.write(text);
            bw.newLine();//换行
            bw.flush();//刷新
            //发送完后,文本框内应没有内容
            jtf.setText(null);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

 其实两个实现类百分之九十以上的代码都是一样的,只不过稍微有点名称的变动而已。文章来源地址https://www.toymoban.com/news/detail-515892.html

到了这里,关于纯JAVA模拟、实现QQ简易聊天互动程序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java网络编程----通过实现简易聊天工具来聊聊NIO

    前文我们说过了BIO,今天我们聊聊NIO。 NIO 是什么?NIO官方解释它为 New lO ,由于其特性我们也称之为,Non-Blocking IO。这是jdk1.4之后新增的一套IO标准。 为什么要用NIO呢? 我们再简单回顾下BIO: 阻塞式IO,原理很简单,其实就是多个端点与服务端进行通信时,每个客户端有一个

    2024年02月05日
    浏览(59)
  • 09-微信小程序 网络请求API(实现轮播广告和简易的聊天窗口)

    09-微信小程序API网络请求(实现轮播广告和简易的聊天窗口) 做项目的开发,一定离不开网络相关的操作,小程序做的都是客户端,客户端请求服务端做一些交互。 微信小程序提供的API的方式,通过API的方式可以调用微信提供的强大的功能,以增强小程序的功能,如:网络请

    2024年02月11日
    浏览(41)
  • Java+Swing+mysql仿QQ聊天工具

    系统主要功能:用户登陆、好友列表、好友聊天、服务器日志 1.Chat.java Java+Swing实现学生选课管理系统 Java+Swing实现学校教务管理系统 Java+Swing+sqlserver学生成绩管理系统 Java+Swing用户信息管理系统 Java+Swing实现的五子棋游戏 基于JavaSwing 银行管理系统 Java+Swing+mysql仿QQ聊天工具

    2024年02月08日
    浏览(37)
  • 实现实时互动:用Spring Boot原生WebSocket打造你的专属聊天室

    😊 @ 作者: 一恍过去 💖 @ 主页: https://blog.csdn.net/zhuocailing3390 🎊 @ 社区: Java技术栈交流 🎉 @ 主题: 实现实时互动:用Spring Boot原生WebSocket打造你的专属聊天室 ⏱️ @ 创作时间: 2023年08月04日 WebSocket 实现聊天室的原理包括建立 WebSocket 连接的握手过程、保持连接状态以

    2024年02月10日
    浏览(52)
  • 【linux高性能服务器编程】项目实战——仿QQ聊天程序源码剖析

    hello !大家好呀! 欢迎大家来到我的Linux高性能服务器编程系列之项目实战——仿QQ聊天程序源码剖析,在这篇文章中, 你将会学习到如何利用Linux网络编程技术来实现一个简单的聊天程序,并且我会给出源码进行剖析,以及手绘UML图来帮助大家来理解,希望能让大家更能了

    2024年04月28日
    浏览(42)
  • Java模拟QQ登录界面(GUI)

    链接: https://pan.baidu.com/s/13JJFyg14CbShs_HzLAoW6w?pwd=pwu3 提取码: pwu3  对每个文本框进行监控,鼠标定在哪的时候,下边框变为蓝色 用户光标定到文本框的时候,要是没有输入信息,就把里面的提示文字给清除掉,给用户一个好的体验 登录的时候对账号和密码检验,要是账号和密码都是ad

    2024年02月03日
    浏览(40)
  • Unity+讯飞星火大模型+Web api,实现二次元小姐姐AI聊天互动

            最近讯飞的星火大模型更新了2.0版本,增强了AI的语言生成能力。毕竟是国产大语言模型,我也尝试使用了一下星火大模型的应用广场,体验还是很不错的。应用广场提供了很多AI助手工具,也支持用户创建自己的AI助手,能力不局限于自然语言生成,也有一些图片生

    2024年02月08日
    浏览(56)
  • 编写C程序模拟实现单处理机系统中进程调度,实现对多个进程的调度模拟,要求采用多级反馈队列调度算法进行模拟调度。(江西师范大学)

    编写C程序模拟实现单处理机系统中进程调度,实现对多个进程的调度模拟,要求采用多级反馈队列调度算法进行模拟调度。 数据结构设计:PCB:结构体;就绪队列:每个节点为进程PCB;进程状态 具体调度算法:FCFS、SJF、PR;涉及多种操作:排序、链表操作 程序输出设计:调

    2024年02月04日
    浏览(54)
  • ChatGPT编程实现简易聊天工具

    今天借助[[小蜜蜂]][https://zglg.work]网站的ChatGPT练习socket编程,实现一个简易聊天工具软件。 环境:Pycharm 2021 系统:Mac OS 向ChatGPT输入如下内容: ChatGPT收到后,根据返回结果并进行部分修改,如下所示: 下面是一个简易的客户端-服务器聊天程序的示例代码,使用 Python 的 s

    2024年03月18日
    浏览(37)
  • Qt实现简易聊天室

    目录 一、界面展示(界面用ui 设计)  群成员展示界面( denglu)    聊天界面展示( widget ) 二、代码展示 (所有代码非原创)  denglu.h和widget.h  denglu.cpp、main.cpp、widget.cpp 三、软件制作  

    2024年02月08日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包