【汇智学堂】基于UDP协议的JAVA版窗口1对1聊天程序

本机测试效果如下:
在这里插入图片描述p公共类,做为客户端与服务器端的界面

package com.huizhi;

import javax.swing.*;
import java.awt.*;
import java.io.IOException;

public class PublicUi {
    JTextArea ja;
    JButton jButton;
    JTextField jTextField;

    public void setUi(String a) throws IOException {
        JFrame jFrame=new JFrame();
        jFrame.setVisible(true);
        jFrame.setTitle(a);
        jFrame.setBounds(50,50,400,400);
       // jFrame.setResizable(false);
        jButton=new JButton("发送消息");
        jTextField=new JTextField();
        jTextField.setColumns(30);

        ja=new JTextArea();

        ja.setRows(20);
        ja.setColumns(30);

        jFrame.setLayout(new FlowLayout());
        jFrame.add(jTextField);
        jFrame.add(jButton);
        jFrame.add(ja);

    }
}

客户端代码

package com.huizhi;

import javax.swing.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.IOException;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class ClientUDP extends PublicUi{

    public String stra;
    DatagramSocket socket;
    InetAddress address;
    DatagramPacket packet2;


    public static void main(String[] args) throws Exception {

         ClientUDP clientUDP=new ClientUDP();
         //clientUDP.setUi();
         clientUDP.sendOrReceive("客户端");

    }

    public void sendOrReceive(String a) throws Exception{

        setUi(a);
        setListen2(jButton);

        //建立套接字接口

        //socket = new DatagramSocket();
        socket = new DatagramSocket(8081);
        address = InetAddress.getByName("localhost");
        //实例化Scanner类
        //String line=this.stra;
        //BufferedReader br = new BufferedReader(new InputStreamReader(clientUi.sta));

        /*接收的数据包*/
        byte[] msgByte = new byte[1024];
        // 接收消息的数据报包
        packet2 = new DatagramPacket(msgByte, msgByte.length);

        while(true){
            //发送的数据报包
            //System.out.println(this.stra);

            socket.receive(packet2);
            String msg = new String(packet2.getData(),0,packet2.getLength());
            System.out.println("窗口A收到信息:"+msg);
            ja.append(msg+"\r\n");
        }
    }

    public void setListen2(JButton jButton){
        jButton.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                // super.mouseClicked(e);
                stra =jTextField.getText();
                System.out.println(stra);
                /*JOptionPane.showMessageDialog();*/

                if(stra!=null){

                    DatagramPacket  datagramPacket = new DatagramPacket(stra.getBytes(),stra.getBytes().length,address,8080);

                    try{
                        socket.send(datagramPacket);
                    }
                    catch (IOException e1){
                        e1.printStackTrace();
                    }
                }
            }
        });
    }
}

服务器端代码

/*
实现窗口聊天
 */
package com.huizhi;

import javax.swing.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class ServerUDP extends PublicUi {

    private DatagramPacket packet;
    private String stra;

    public static void main(String[] args) throws Exception {
        ServerUDP serverUDP=new ServerUDP();
        serverUDP.sendOrReceive();
    }

    public void sendOrReceive() throws Exception{
        setUi("服务器端");
        @SuppressWarnings("resource")
        DatagramSocket datagramSocket = new DatagramSocket(8080);//绑定消息接收端口8080
        // 用以存放接收数据的字节数组
        byte[] msgByte = new byte[1024];
        // 接收消息的数据报包
        packet = new DatagramPacket(msgByte, msgByte.length);
        InetAddress address;
        address = InetAddress.getByName("localhost");

        /*
         * 回传数据*/


        /*BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        String line;*/

        //Scanner sc = new Scanner(System.in);  //实例化Scanner类

        setListen(jButton,datagramSocket,address);

        while(true){
            datagramSocket.receive(packet);
            String msg = new String(packet.getData(),0,packet.getLength());
            System.out.println("窗口B收到信息:"+msg);
            ja.append(msg+"\r\n");

             /*
             回传数据去客户端
         */
            /*if((line = br.readLine())!=null){
                DatagramPacket datagramPacket = new DatagramPacket(line.getBytes(),line.getBytes().length,packet.getAddress(),packet.getPort());
                datagramSocket.send(datagramPacket);
            }*/
        }

    }

    public void setListen(JButton jButton,DatagramSocket socket,InetAddress address){
        jButton.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                // super.mouseClicked(e);
                stra =jTextField.getText();
                System.out.println(stra);
                /*JOptionPane.showMessageDialog();*/

                if(stra!=null){
                    DatagramPacket  datagramPacket = new DatagramPacket(stra.getBytes(),stra.getBytes().length,address,8081);
                    try{
                        socket.send(datagramPacket);
                    }
                    catch (IOException e1){
                        e1.printStackTrace();
                    }
                }
            }
        });
    }
}
发布了268 篇原创文章 · 获赞 47 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/weixin_39593940/article/details/103502494
今日推荐