Java基于UDP的GUI界面简易聊天室课程实验(获取本机IP、IDEA同个程序运行两次设置方法)

  • Post author:
  • Post category:java




1、效果图

在这里插入图片描述

在这里插入图片描述



2、项目开发


本程序使用到的所有类、方法以及内部类:

  • public class UDPChat extends JFrame{};
  • public class UDPChatFace extends JPanel implements ActionListener{}:

    • public void init(){};
    • private void sendMessage(byte[] data){};
    • private void send(){};
    • private class Receive extends Thread{};
    • public void actionPerformed(ActionEvent e) {};



2.1、项目阐述

基于UDP协议编写一个GUI界面的简易聊天室

开发软件:

IDEA



2.2、项目思路

利用UDP协议进行信息的传输与接收,由于聊天室属于即时通讯,所以必须做到同时接收与发送,因此可以考虑利用多线程完成该目的。



2.3、项目涉及知识点

  • GUI界面知识
  • UDP协议
  • 多线程



2.4、UDP通信协议

  • 优点:传输速度快,安全性高

    原因:不同于TCP的三次握手协议,UDP是一个无状态的传输协议,因此传输数据非常快;由于没有TCP的确认机制、三次握手机制等多种机制,因此相对较为安全,但并不是绝对安全。
  • 缺点:不可靠,只负责发送,不负责一定“送”到
  • 适用于对数据传输速度要求较高,质量不高的场合,如:视频、通讯、游戏等



2.5、GUI界面设计


使用到的组件:

JPanel、JScrollPane、JLabel、JTextField、JTextArea、JButton

public class UDPChatFace extends JPanel implements ActionListener {
   

    //创建变量
    JPanel panel_1;
    JPanel panel_2;
    JPanel panel_3;
    JScrollPane panel_2_1;//滚动面板显示聊天记录
    JPanel panel_2_2;

    JLabel label1;//监听
    JLabel label2;//ip
    JLabel label3;//端口

    JTextField textField_ip;//ip输入
    JTextField textField_port;//端口号输入

    JTextArea textArea_history;//聊天记录文本域
    JTextArea textArea_message;//输入文字信息文本域

    JButton button_concern;
    JButton button_send;
    JButton button_clear;

    //端口设置
    //一般设置在8000以上,8000以下的端口号大部分被占用
    private int localPort = 10001;//本地端口
    private int otherPort = 10002;//对方端口

    private String ip;

    String message;//输入框信息
    private DatagramSocket socket;


    public UDPChatFace(){
   
        init();
    }

    public void init(){
   
        //添加组件
        panel_1 = new JPanel();
        panel_2 = new JPanel();
        panel_3 = new JPanel();

        textArea_history = new JTextArea(40,68);//设置聊天记录框的大小
        textArea_history.setEditable(false);//设置聊天记录框不可输入
        textArea_message = new JTextArea(13,70);
        textArea_message.addKeyListener(new KeyAdapter() {
   
            @Override
            public void keyPressed(KeyEvent e) {
     //键盘监听事件,实现文本框输入后,按回车消息发送的功能
                if (e.getKeyCode() == KeyEvent.VK_ENTER){
   
                    if (textArea_message.getText().equals("")){
   
                        JOptionPane.showMessageDialog(panel_1,"不可发送空白信息!"); //弹窗
                        return;
                    }else {
   
                        send()



版权声明:本文为ttbro原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。