UDP实现群聊

 代码:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.net.*;
import java.io.IOException;
import java.lang.String;public class liaotian 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(liaotian.this,"请输入IP地址和端口号");return;}if(datagramSoket==null||datagramSoket.isClosed()){JOptionPane.showMessageDialog(liaotian.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(liaotian.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) {liaotian a=new liaotian();a.setUpUI();a.initSocket();a.setListener();}}

结果:

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/221406.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于javaweb实现的实践教学基地管理系统

一、系统架构 前端&#xff1a;html | js | css | bootstrap 后端&#xff1a;spring | springmvc | mybatis-plus 环境&#xff1a;jdk1.8 | mysql8 | tomcat | maven 二、代码及数据库 三、功能介绍 01. web-首页1 02. web-首页2 03. web-首页3 04. web-首页4 05. 管…

【android开发-24】android中访问http协议网络以及解析xml格式数据的详细讲解

1&#xff0c;访问http协议网络 在Android中&#xff0c;使用HttpURLConnection访问网络的完整参考代码如下&#xff1a; 首先&#xff0c;创建一个名为HttpUtils的工具类&#xff0c;用于封装HTTP请求的方法。 import java.io.BufferedReader; import java.io.IOException;…

智慧运维:一体化管理软件解决方案

随着信息化时代的快速发展&#xff0c;各行各业对运维管理的要求越来越高。为了满足不断增长的需求&#xff0c;我们推出了一款全新的一体化监控运维软件。该软件采用综合运维系统&#xff0c;实现对云服务平台、大数据平台、智慧安防、业务软件、基础设施和安全防范设施的全方…

2024年邮件群发的优势

在当今数字化时代&#xff0c;随着社交媒体和移动应用的兴起&#xff0c;有些人可能会认为邮件营销已经过时了&#xff0c;不再是有效的营销方式。然而&#xff0c;事实并非如此。事实上&#xff0c;邮件营销仍然是一种强大而有效的工具&#xff0c;可以帮助企业建立品牌认知、…

【TC3xx】GETH

目录 一、RGMII 二、SMI接口 三、TC3xx MCAL 3.1 MCU 3.2 Port 3.3 DMA 3.4 中断配置 3.5 ETH 3.6 集成 一、RGMII TC3xx支持MII/RMII/RGMII三种以太网数据通信接口。其中RGMII经常用于MAC和MAC之间&#xff0c;或MAC与PHY之间的通信&#xff0c;RGMII的带宽可以是10M…

Soul 推出“SoulX”AI人工智能模型,已应用于旗下 App“苟蛋”AI聊天机器人

Soul社交平台最近发布了名为”SoulX“的AI人工智能模型&#xff0c;SoulX将作为Soul “AIGC社交”布局的重要基建&#xff0c;具备prompt驱动、条件可控生成、上下文理解、多模态理解等能力&#xff0c;垂直应用于平台上多元社交互动场景&#xff0c;如智能对话机器人、AI辅助聊…

为什么越来越多的人从事软件测试行业?

1.市场需求增加&#xff1a;随着数字化转型和互联网的普及&#xff0c;各行各业都需要高质量、稳定可靠的软件来支持其业务运作。因此&#xff0c;对软件测试人员的需求也随之增加。同时&#xff0c;新兴技术的发展&#xff0c;如物联网、大数据、区块链、人工智能等&#xff0…

图纸加密防泄密软件排名

随着科技的不断发展&#xff0c;图纸作为企业的核心资产&#xff0c;其安全性越来越受到重视。为了防止图纸泄露和被非法获取&#xff0c;许多企业开始采用图纸加密防泄密软件来保护自己的核心资产。 本文将介绍一些在市场上广受欢迎的图纸加密防泄密软件&#xff0c;并分析其优…

Spring 框架有哪些缺点?

目录 1、性能问题 2、配置复杂性 3、学习曲线 4、过度依赖Spring生态 5、过分依赖"魔法" 6、版本升级和兼容性问题 7、依赖注入的滥用 1、性能问题 缺点描述&#xff1a; Spring的依赖注入和AOP&#xff08;面向切面编程&#xff09;功能虽然提供了极大的灵活…

电话营销是如何影响企业的销售业绩的?

目前电话营销已经成为销售行业的一个重要分支。通过大量的拨打电话积累客户&#xff0c;效率比传统的陌拜高得多。 电话营销的概念和特点 电话营销是指企业通过电话这一渠道&#xff0c;向目标客户进行销售、市场推广、调查等活动的一种营销方式。具有以下特点&#xff1a; …

TSINGSEE青犀中央厨房视频智能监控监管解决方案

一、行业背景 预制菜是指经过洗、切、搭配、加工完成的菜品&#xff0c;采取冷冻或真空等一系列方式进行包装保存&#xff0c;消费者购买后只需通过简单烹调或直接开封即可食用&#xff0c;具有方便、高效、出品稳定的特点。据统计报告分析&#xff0c;从上游食材生产推算以及…

JVM虚拟机系统性学习-JVM相关工具jps、jstat、jinfo、jmap、jhat和jstack

JVM 相关工具 JDK 工具包 jps 查看 Java 进程 jps &#xff1a;列出Java程序进程ID和Main函数名称 jps -q &#xff1a;只输出进程ID jps -m &#xff1a;输出传递给Java进程&#xff08;主函数&#xff09;的参数 jps -l &#xff1a;输出主函数的完整路径 jps -v &#x…

LeetCode Hot100 148.排序链表

题目&#xff1a; 给你链表的头结点 head &#xff0c;请将其按 升序 排列并返回 排序后的链表 。 class Solution {public ListNode sortList(ListNode head) {return sortList(head, null);}private ListNode sortList(ListNode head, ListNode tail) {if (head null)retur…

深入解析MSSQL聚簇索引:加速查询的利器

在大数据时代&#xff0c;高效的数据库索引是保证系统性能的关键。而在MSSQL数据库中&#xff0c;聚簇索引是一项强大的技术&#xff0c;它能够极大地提升查询性能和数据访问效率。本文将深入探讨聚簇索引的原理、与其他索引的区别&#xff0c;以及适用的场景和关键技术点&…

【贪心】LeetCode-55. 跳跃游戏

55. 跳跃游戏。 给你一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标&#xff0c;如果可以&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例 …

回归预测 | MATLAB实现IBL-LSSVM【23年新算法】逻辑优化算法优化最小二乘支持向量机的数据回归预测 (多指标,多图)

回归预测 | MATLAB实现IBL-LSSVM【23年新算法】逻辑优化算法优化最小二乘支持向量机的数据回归预测 &#xff08;多指标&#xff0c;多图&#xff09; 目录 回归预测 | MATLAB实现IBL-LSSVM【23年新算法】逻辑优化算法优化最小二乘支持向量机的数据回归预测 &#xff08;多指标…

计算机网络:运输层

0 本节主要内容 问题描述 解决思路 1 问题描述 1.1 知识回顾 利用如下拓扑对前面的知识进行回顾。 问题&#xff1a;源主机 H 1 \textrm{H}_1 H1​要和目的主机 H 2 \textrm{H}_2 H2​进行通信&#xff0c;源主机 H 1 \textrm{H}_1 H1​要构建数据包封装来自应用层的数据。…

【产品应用】一体化伺服电机在TO全自动封焊机中的应用

随着科技的飞速发展&#xff0c;自动化设备在各行各业中的应用越来越广泛。在电子制造领域&#xff0c;封焊机是关键设备之一&#xff0c;其性能直接影响产品的质量和产量。近年来&#xff0c;一体化伺服电机在TO全自动封焊机中的应用逐渐受到关注。本文将详细介绍一体化伺服电…

DCNv2安装适配pytorch各个版本

DCNv2安装适配pytorch各个版本 介绍解决方案使用Fork版本&#xff08;推荐&#xff09;☆☆☆☆☆DCNv2_latest项目&#xff08;不推荐&#xff09; 介绍 原始项目&#xff1a;https://github.com/CharlesShang/DCNv2 注意&#xff1a;原始项目只有低版本的pytorch安装 解决方…

我本地是正常的,线上就有问题?为啥?玄学?

笔者作为研发&#xff0c;细细数来已经搬了多年程序的砖了&#xff0c;也带了不少新人&#xff0c;发现好多新人都有如题的提问。这里珍重申明我并不是歧视新人哈&#xff0c;只是想根据老程序猿搬砖的经验&#xff0c;分享一下问题排查经验。或许对焦头烂额的你会有那么一点点…