UDP多人群聊

这篇具有很好参考价值的文章主要介绍了UDP多人群聊。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一.创建类

UDP多人群聊,java

二.类

1.Liao类

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.net.*;
import java.io.IOException;
import java.lang.String;
 
public class Liao extends JFrame{
    private static final int DEFAULT_PORT=8899;
    private JLabel stateLB;
    private JTextArea centerTextArea;
    private JPanel southPanel;
    private JTextArea inputTextArea;
    private JPanel bottomPanel;
    private JTextField ipTextField;
    private JTextField remotePortTF;
    private JButton sendBT;
    private JButton clearBT;
    private DatagramSocket datagramSoket;
    private void setUpUI(){
        setTitle("聊天");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(400,400);
        setResizable(false);//窗口大小不可改变
        setLocationRelativeTo(null);//设置窗口相对于指定组件的位置
        stateLB=new JLabel("weijianting");
        stateLB.setHorizontalAlignment(JLabel.RIGHT);
        centerTextArea=new JTextArea();
        centerTextArea.setEditable(false);
        centerTextArea.setBackground(new Color(211,211,211));
        southPanel=new JPanel(new BorderLayout());
        inputTextArea=new JTextArea(5,20);
        bottomPanel=new JPanel(new FlowLayout(FlowLayout.CENTER,5,5));
        ipTextField=new JTextField("127.0.0.1",8);
        remotePortTF=new JTextField(String.valueOf(DEFAULT_PORT),3);
        sendBT=new JButton("发送");
        clearBT=new JButton("清屏");
        bottomPanel.add(ipTextField);
        bottomPanel.add(remotePortTF);
        bottomPanel.add(sendBT);
        bottomPanel.add(clearBT);
        southPanel.add(new JScrollPane(inputTextArea),BorderLayout.CENTER);
        southPanel.add(bottomPanel,BorderLayout.SOUTH);
        add(stateLB,BorderLayout.NORTH);
        add(new JScrollPane(centerTextArea),BorderLayout.CENTER);
        add(southPanel,BorderLayout.SOUTH);
        setVisible(true);
    }
private void setListener(){
    sendBT.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){
            final String ipAddress=ipTextField.getText();
            final String remotePort=remotePortTF.getText();
            if(ipAddress==null||ipAddress.trim().equals("")||remotePort==null||remotePort.trim().equals("")){
                JOptionPane.showMessageDialog(Liao.this,"请输入IP地址和端口号");
                return;
            }
            if(datagramSoket==null||datagramSoket.isClosed()){
                JOptionPane.showMessageDialog(Liao.this,"监听未成功");
                return;
            }
            String sendContent=inputTextArea.getText();
            byte[] buf=sendContent.getBytes();
            try{
                centerTextArea.append("我对"+ipAddress+":"+remotePort+"说:\n"+inputTextArea.getText()+"\n\n");
                centerTextArea.setCaretPosition(centerTextArea.getText().length());
                datagramSoket.send(new DatagramPacket(buf,buf.length,InetAddress.getByName(ipAddress),Integer.parseInt(remotePort)));
                inputTextArea.setText("");
            }catch(IOException e1){
                JOptionPane.showMessageDialog(Liao.this, "出错了,发送不成功");
                e1.printStackTrace();
            }
        };
    });
    clearBT.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){
            centerTextArea.setText("");
        }
    });
}
private void initSocket(){
    int port=DEFAULT_PORT;
    while(true){
        try{
            if(datagramSoket!=null&&!datagramSoket.isConnected()){
                datagramSoket.close();
            }
            try{
                port=Integer.parseInt(JOptionPane.showInputDialog(this,"请输入端口号","端口号",JOptionPane.QUESTION_MESSAGE));
                if(port<1||port>65535){
                    throw new RuntimeException("端口号超出范围");
                }
            }catch(Exception e){
                JOptionPane.showMessageDialog(null,"你输入的端口不正确,请输入1~65535之间的数");
                continue;
            }
            datagramSoket=new DatagramSocket(port);
            startListen();
            stateLB.setText("已在"+port+"端口监听");
            break;
        }catch(SocketException e){
            JOptionPane.showMessageDialog(this, "端口号被占用,请重新设置端口");
            stateLB.setText("当前未启动监听");
        }
    }
}
private void startListen(){
    new Thread(){
        private DatagramPacket p;
        public void run(){
            byte[] buf=new byte[1024];
            p=new DatagramPacket(buf,buf.length);
            while(!datagramSoket.isConnected()){
                try{
                    datagramSoket.receive(p);
                    centerTextArea.append(p.getAddress().getHostAddress()+":"+((InetSocketAddress)p.getSocketAddress()).getPort()+"对我说:\n"+new String(p.getData(),0,p.getLength())+"\n\n");
                    centerTextArea.setCaretPosition(centerTextArea.getText().length());
                }catch(IOException e){
                    e.printStackTrace();
                }
            }
        }
    }.start();
}
        public static void main(String[] args) {
            Liao a=new Liao();
            a.setUpUI();
            a.initSocket();
            a.setListener();
        }
        
}

三.结果

UDP多人群聊,java

UDP多人群聊,java

UDP多人群聊,java文章来源地址https://www.toymoban.com/news/detail-759742.html

到了这里,关于UDP多人群聊的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 助力智能密集人群检测计数,基于YOLOv8全系列模型【n/s/m/l/x】开发构建通用场景下密集人群检测计数识别系统

    在一些人流量比较大的场合,或者是一些特殊时刻、时段、节假日等特殊时期下,密切关注当前系统所承载的人流量是十分必要的,对于超出系统负荷容量的情况做到及时预警对于管理团队来说是保障人员安全的重要手段,本文的主要目的是想要基于通用的数据开发构建用于

    2024年01月23日
    浏览(46)
  • java 发送和接收udp数据 udp数据帧结构

    项目开发中,有个需求是接收udp的组播信息,获取帧并解析其中的内容。之前没有接触过udp的通讯以及数据帧。查阅资料对udp的通讯间的发送与接收实现记录如下。 UDP有三种通讯方式,分别是, 单播 、广播、还有组播。 单播 : 单机与单机之间的通讯 广播 : 当前主机与所在

    2024年02月02日
    浏览(36)
  • 巨量千川不同阶段人群定向策略使用技巧汇总

    巨量千川不同阶段人群定向策略 一: 人群定向和转化的关系 1: 人群定向 巨量千川中,哪个数据指标最能反应人群价格? 质量高低? 第一个千展: 千次展现平均消耗,本质是平台对人群的定价 编辑切换为居中 第二个客单价: 客单价,本质是人群质量的高低 编辑切换为居中 平台

    2024年02月16日
    浏览(53)
  • 人群计数经典方法Density Map Estimation,密度图估计

    这是crowd counting的主流方法 传统方法不好在哪里? object detection-based method和regression-based method无法从图像中提取更抽象的有助于完成人群计数任务的语义特征 概况 :给每个像素赋予密度值,总和记为场景中的人数。用高斯核gaussian kernel来模拟simulate人头在原图的对应位置cor

    2024年02月01日
    浏览(40)
  • 有 AI,无障碍,AIoT 设备为视障人群提供便利

    据世界卫生组织统计,全球共 22 亿人视力受损,包含 2.85 亿视障人群和 3,900 万全盲人群。而且,这一数字将随老龄化加剧不断增加。 虽然视障人群面临着诸多不便,但是针对视障人群的辅助设备却存在成本高、维护困难、操作复杂等问题,很难满足他们的生活需求。 为此,

    2024年02月08日
    浏览(59)
  • 【Java 基础篇】Java UDP通信详解

    UDP(User Datagram Protocol)是一种无连接的网络传输协议,它不像TCP那样需要建立连接和维护状态,因此更加轻量级。UDP适用于那些对数据传输的实时性要求较高,可以容忍一定数据丢失的场景。本文将详细介绍Java中如何使用UDP协议进行网络通信,包括UDP套接字、数据传输、服

    2024年02月04日
    浏览(35)
  • JAVA中的UDP通信

    概念: 用户数据报传输协议 特点: 传输数据量小(64K),不一定传输成功,没有明确的客户端与服务端的概念,数据不会通过输入输出流传输,而是会通过打包成数据报,,再传输入通道 DatagramSocket 一 、构造方法 (1)DatagramSocket() 绑定到本地地址和一个随机的端口号 (2)

    2024年02月13日
    浏览(32)
  • 【Java】传输层UDP

    UDP传输的过程类似于寄信 无连接,不可靠传输,面向数据报,全双工 知道对端的IP和端口号就直接进行传输,不需要建立连接; 没有任何安全机制,发送端发送数据报以后,如果因为网络故障该段无法发到对方,UDP协议层也不会给应用层返回任何错误信息 应用层交给UDP多长的报

    2024年02月09日
    浏览(24)
  • 【Java】实现UDP通信

    🎈博客主页:🌈我的主页🌈 🎈欢迎点赞 👍 收藏 🌟留言 📝 欢迎讨论!👏 🎈本文由 【泠青沼~】 原创,首发于 CSDN🚩🚩🚩 🎈由于博主是在学小白一枚,难免会有错误,有任何问题欢迎评论区留言指出,感激不尽!🌠个人主页 TCP —传输控制协议,提供的是面向连接、

    2024年02月07日
    浏览(40)
  • Java网络编程——UDP

    目录 UDP网络通信编程 基本介绍 UDP编程的基本流程 应用实例 本章习题 第一题 服务端 客户端 第二题 服务端 客户端 基本介绍 UDP(User Datagram Protocol)是一种无连接的传输协议,不保证传输数据的可靠性。在网络通信中,UDP常用于那些对实时性要求较高、可靠性要求较低的应

    2024年02月06日
    浏览(31)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包