千家信息网

基于UDP协议开发Java聊天系统的方法

发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,这篇文章主要介绍"基于UDP协议开发Java聊天系统的方法",在日常操作中,相信很多人在基于UDP协议开发Java聊天系统的方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家
千家信息网最后更新 2025年11月08日基于UDP协议开发Java聊天系统的方法

这篇文章主要介绍"基于UDP协议开发Java聊天系统的方法",在日常操作中,相信很多人在基于UDP协议开发Java聊天系统的方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"基于UDP协议开发Java聊天系统的方法"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

代码展示

下面展示一些 Client类

/**------------------- * 发送端 **---------------------*/class Client extends Thread{    private static String content;       //发送内容    private static int port;             //发送端口    private static int target;           //目标端口    private static byte[] addr;          //目标ip地址        /**-------------------         *构造函数         **---------------------*/    public Client(String content,int port,int target,byte[] addr){        this.content=content;        this.port=port;        this.target=target;        this.addr=addr;    }        /**-------------------         *发送端函数         **---------------------*/    public void run(){        DatagramSocket client= null;        try {            //定义发送端端口为 port 的DatagramSocket对象            client = new DatagramSocket(port);        } catch (SocketException e) {            e.printStackTrace();        }        String str=content;        DatagramPacket packet= null;        try {            //定义DatagramPacket对象,用于封装发送的数据以及目标地址 target            packet = new DatagramPacket(str.getBytes(),str.getBytes().length,                    InetAddress.getByAddress(addr),target);        } catch (UnknownHostException e) {            e.printStackTrace();        }        try {            //发送数据            client.send(packet);        } catch (IOException e) {            e.printStackTrace();        }        //关闭释放资源        client.close();    }}    /**-------------------     *接收端     **---------------------*/class Server extends Thread{    private static JTextArea jt;           //对话框    private static int target;             //目标端口        /*-------------------              构造函数        ---------------------*/    public  Server(JTextArea jt,int target){        this.jt=jt;        this.target=target;    }

下面展示一些 Server类

    /*-------------------    接收端    ---------------------*/class Server extends Thread{    private static JTextArea jt;           //对话框    private static int target;             //目标端口        /*-------------------              构造函数        ---------------------*/    public  Server(JTextArea jt,int target){        this.jt=jt;        this.target=target;    }        /*-------------------              接收端函数        ---------------------*/    public void run(){        String str;        DatagramSocket server= null;        try {            //定义一个端口号为 target 的接收端DatagramSocket对象            server = new DatagramSocket(target);        } catch (SocketException e) {            e.printStackTrace();        }        byte[] buf=new byte[1024];        //定义一个DatagramPacket数据报对象,用于封装接收数据        DatagramPacket packet=new DatagramPacket(buf, buf.length);        while (true){            try {                //等待接收数据,在数据没有被接收到之前会被堵塞                server.receive(packet);            } catch (IOException e) {                e.printStackTrace();            }            //使用DatagramPacket的方法获得接收到的信息,并转为字符串类型            str=new String(packet.getData(),                    0,packet.getLength());            //将接收到的信息打印到对话框            jt.append("接收到:"+str+"");        }    }}

下面展示一些 Main类

public class Main {    public static int port;    public static int target;    public static byte[] addr;    public static void Login(){        System.out.print("请输入端口号:");        Scanner ScPort=new Scanner(System.in);        port=ScPort.nextInt();        System.out.print("请输入目标端口号1:");        Scanner ScTarget=new Scanner(System.in);        target=ScTarget.nextInt();        System.out.print("请输入目标端口号2:");        Scanner ScTarget2=new Scanner(System.in);        int target2=ScTarget2.nextInt();        System.out.print("请输入目标IP地址:");        Scanner Scaddr=new Scanner(System.in);        /*---------------------        将目标IP存储到数组中        -----------------------*/        String ip=Scaddr.nextLine();        /*---------------------        public String[] split(String regex):             根据给定正则表达式的匹配拆分此字符串         ----------------------*/        String[] ii=ip.split("\.");        /*---------------------        我们现在使用的IPv4是用一个32位的二进制数来存储的,为了方便记忆,        会将其分成4个8位的二进制数(4个一字节的二进制数),每8位之间用圆点隔开。        而每8位二进制数可以转换为一个0~255的十进制数,例如103.42.176.244,        这种写法被称为点数表示法         ----------------------*/        byte[] addr=new byte[4];        for(int i=0;i<4;i++){            addr[i]=(byte)(Integer.parseInt(ii[i]));        }        System.out.println("窗口启动中....");        new Thread(new Server(CreateAndShowGUI(port,target,addr),target2),"接收服务").start();    }    /*-------------------    GUI界面    ---------------------*/    public static JTextArea CreateAndShowGUI(int port,int target,byte[] addr){        /*---------------------        创建界面         ----------------------*/        JFrame jf=new JFrame("聊天界面");        jf.setLocation(400,200);        jf.setSize(400,300);        /*---------------------        设置布局         ----------------------*/        jf.setLayout(new BorderLayout());        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        /*---------------------        创建聊天窗口         ----------------------*/        JTextArea jt=new JTextArea(14,34);        JScrollPane scrollPane=new JScrollPane(jt);        jt.setEditable(false);        /*---------------------        创建发送窗口         ----------------------*/        JTextField jte=new JTextField(20);        JButton jb=new JButton("发送");        jb.addActionListener(e->{            String content=jte.getText();            /*---------------------            为发送按钮创建动作             ----------------------*/            if (content!=null&&!content.trim().equals("")){                /*-------------------                判断信息是否为空                若为空,在在对话框提示 你输入的内容为空                反之发送                 --------------------*/                jt.append("输入信息为:"+content+"");                /*--------------                将发送框信息发送到目标对话框                传入Client方法的参数分别为                "发送内容,发送端口,目标端口,目标IP地址"                ----------------*/                try {                    new Thread(new Client(content,port,target,addr),"发送服务").start();                } catch (Exception exception) {                    exception.printStackTrace();                }            }else{                jt.append("你输入的内容为空");            }            jte.setText("");      //信息发送后,将发送框重置        });        JPanel jp=new JPanel();        JLabel jl=new JLabel("聊天信息");        jp.add(jl);        jp.add(jte);        jp.add(jb);        jf.add(jt,BorderLayout.PAGE_START);        jf.add(jp,BorderLayout.PAGE_END);        //显示GUI界面        jf.setVisible(true);        return jt;    }    public static void main(String[] args) throws Exception{        Login();    }}

到此,关于"基于UDP协议开发Java聊天系统的方法"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

目标 方法 信息 输入 数据 端口 函数 对话框 对话 协议开发 系统 开发 二进制 内容 口号 地址 对象 学习 字符 字符串 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 解决网络安全办法 数据库服务器的处理器 mvc的数据库删除操作日志 球赛类软件开发 关于网络安全的内容50字 怎么实现多服务器登录 技术信用数据库属于信用数据库 违反网络安全法规定的人员 网络技术对各教师的挑战 做个网络安全系统有前途吗 盐城网络安全准入控制研发公司 通信网络技术支持面试题 江西智慧景区软件开发 服务器红鱼衬衣 《网络安全法》自多少日起实行 网络安全综合治理体系方案 徐汇区提供软件开发质量保障 苏州世纪伙伴网络技术有限公司 纳铭网络技术公司 知名的直销软件开发 常用网络安全系统分析工具 分布式数据库一致性xa 解决网络安全办法 网络安全排名大学排名2021 各种中文数据库的比较好 家庭组建服务器 格瑞姆巴托数据库 珠海公文机器人rpa软件开发 软件开发实践的思想基础 网络安全竞赛新手题目怎么做
0