Java模拟QQ实现聊天互动程序

目录
  • 介绍
  • 功能演示
  • 运用到的知识点
  • 核心代码
    • 服务端
    • 客户端

介绍

实现的功能、步骤:

1、定义JFrame窗体中的组件

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

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

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

5、实现回车键发送数据

功能演示

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

运用到的知识点

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();
        }
    }
}

其实两个实现类百分之九十以上的代码都是一样的,只不过稍微有点名称的变动而已。

以上就是Java模拟QQ实现聊天互动程序的详细内容,更多关于Java聊天互动程序的资料请关注我们其它相关文章!

(0)

相关推荐

  • java实现简单TCP聊天程序

    本文实例为大家分享了java实现TCP聊天程序的具体代码,供大家参考,具体内容如下 服务端代码: package com.test.server; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; public class Server { public

  • java仿QQ微信聊天室功能的实现

    话不多说,先上图                                   即时通信系统:可以完成群聊.私人聊天,实时发送和显示聊天信息,完成好友列表,进一步可以带表情,附件发送,聊天信息的传送,等 系统的主要技术socket通信技术,多线程技术,数据库技术. 本系统实现的功能有:1.用户名字登录 2.用户之间的群聊和查看群聊记录3.用户之间的私聊和私聊记录4.动态刷新并显示好友列表5.显示在线人数 6.服务器可以显示用户在线状态 7.能够退出处理. 该程序可以实现局域网的聊天,只要把

  • JavaGUI模仿QQ聊天功能完整版

    本文实例为大家分享了JavaGUI模仿QQ聊天功能完整代码,供大家参考,具体内容如下 ClientForm代码: package GUISocket.chat.Client; import javax.swing.JFrame; import javax.swing.JPanel; import java.awt.EventQueue; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JTextFie

  • Java实战之基于TCP实现简单聊天程序

    目录 一.如何实现TCP通信 二.编写C/S架构聊天程序 1.编写服务器端程序 - Server.java 2.编写客户端程序 - Client.java 3.测试服务器端与客户端能否通信 4.程序优化思路 - 服务器端采用多线程 一.如何实现TCP通信 要实现TCP通信需要创建一个服务器端程序和一个客户端程序,为了保证数据传输的安全性,首先需要实现服务器端程序,然后在编写客户端程序. 在本机运行服务器端程序,在远程机运行客户端程序 本机的IP地址:192.168.129.222 远程机的IP地

  • java中UDP简单聊天程序实例代码

    学过计算机网络通信的都知道,计算机之间传送数据由两种,即TCP通信和UDP通信.TCP是可靠的面向连接的通信协议,二UDP是不可靠的面向无连接的通信协议. java中有基于TCP的网络套接字通信,也有基于UDP的用户数据报通信,UDP的信息传输速度快,但不可靠! 基于UDP通信的基本模式: (1)将数据打包,称为数据包(好比将信件装入信封一样),然后将数据包发往目的地. (2)接受别人发来的数据包(好比接收信封一样),然后查看数据包中的内容. 客户机 复制代码 代码如下: package com

  • java控制台实现聊天程序

    本文实例为大家分享了java控制台实现聊天程序的具体代码,供大家参考,具体内容如下 发送端 package ip.chat; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetSocketAddress; public class TalkSend i

  • Java模拟QQ实现聊天互动程序

    目录 介绍 功能演示 运用到的知识点 核心代码 服务端 客户端 介绍 实现的功能.步骤: 1.定义JFrame窗体中的组件 2.在构造方法中初始化窗体的组件 3.使用网络编程完成数据的传输(TCP,UDP协议) 4.实现发送按钮的监听点击事件 5.实现回车键发送数据 功能演示 没有点发送,数据却发送出去了是因为按了回车键 运用到的知识点 GUI:java实现窗体.Swing.其实JAVA Swing的GUI目前企业中已经不用了,主要是一些学校和培训机构用来教导学生写一些游戏.小项目,练练手的.

  • Java模拟qq软件的详细过程

    目录 登陆界面的实现 登陆界面代码Login类 login的监听类 LoginListener 聊天界面运行图 Client类代码 Server代码 登陆界面代码 **之前在封装代码后出现了问题,按照最初的写法,在登陆完毕后弹出聊天界面后会卡死,原因是当时登陆界面和聊天界面都是使用的主线程,我的代码没有写其他线程,无法多线程运行,因此在弹出聊天界面时线程不够用了,就卡在了监听线程里,因为在监听线程中再有新的监听就会被卡住 在宇哥的指点下,将启动服务器和客户端的部分改为线程,就解决了此问题.改善后

  • Java模拟QQ桌面截图功能实现方法

    本文实例讲述了Java模拟QQ桌面截图功能实现方法.分享给大家供大家参考.具体如下: QQ的桌面截图功能非常方便,去年曾用Java模拟过一个,现整理出来. 本方法首先需要抓到屏幕的整个图象,将图象显示在一个JFrame中,再将JFrame全屏显示,这样就模拟出了一个桌面,Java也就可以获得鼠标的作用区域从而实现桌面中的小范围截屏. import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import

  • java模拟实现斗地主发牌小程序

    一副扑克有54张牌:大小王+4*13,接下来我们来模拟一下斗地主的发牌过程 首先,我们需要买牌,新买来的牌都是按顺序摆放的,因此下一步是洗牌,最后就是发牌了,不过发牌的时候要注意还要在最后留三张底牌. 主要使用的类有 ArrayList:用来存储扑克,Collections用来洗牌. import java.util.ArrayList; import java.util.Collections; /* * 模拟斗地主发牌 一共54张牌 * 买牌 * 洗牌 * 发牌 * */ public cl

  • Java socket通信模拟QQ实现多人聊天室

    目录 一.socket通信基本原理 二.用socket制作一个多人聊天室 三.实现效果 四.总结 一.socket通信基本原理 socket 通信是基于TCP/IP ⽹络层上的⼀种传送⽅式,我们通常把TCP和UDP称为传输层. ​ 如上图,在七个层级关系中,我们讲的socket属于传输层,其中UDP是⼀种⾯向⽆连接的传输层协议.UDP不关⼼对端是否真正收到了传送过去的数据.如果需要检查对端是否收到分组数据包,或者对端是否连接到⽹络,则需要在应⽤程序中实现.UDP常⽤在分组数据较少或多播.⼴播通信

  • 用Python写一个模拟qq聊天小程序的代码实例

    Python 超简单的聊天程序 客户端: import socket, sys host = '10.248.27.23' # host = raw_input("Plz imput destination IP:") # data = raw_input("Plz imput what you want to submit:") port = 51423 s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) tr

  • java实现基于UDP协议的聊天小程序操作

    UDP(User Data Protocol,用户数据报协议)是与TCP相对应的协议.它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去! UDP适用于一次只传送少量数据.对可靠性要求不高的应用环境.正因为UDP协议没有连接的过程,所以它的通信效率高:但也正因为如此,它的可靠性不如TCP协议高.QQ就使用UDP发消息,因此有时会出现收不到消息的情况. 利用UDP协议的发送和接收,模拟聊天小程序 创建聊天程序的A端: 1.发送信息到接收端                 1 .准

  • Java基于UDP协议实现简单的聊天室程序

    最近比较闲,一直在抽空回顾一些Java方面的技术应用. 今天没什么事做,基于UDP协议,写了一个非常简单的聊天室程序. 现在的工作,很少用到socket,也算是对Java网络编程方面的一个简单回忆. 先看一下效果: 实现的效果可以说是非常非常简单,但还是可以简单的看到一个实现原理.  "聊天室001"的用户,小红和小绿相互聊了两句,"聊天室002"的小黑无人理会,在一旁寂寞着. 看一下代码实现: 1.首先是消息服务器的实现,功能很简单: •将客户端的信息(进入了哪一

  • Java continue break制作简单聊天室程序

    Java continue break 制作简单聊天室程序,屏蔽不文明语言,显示每句话聊天时间 package com.swift; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Scanner; public class ChatWithBreakContinue { public static void main(String[] args) { Scanner scan = new Sc

随机推荐