UDP网络通讯(JAVA 实现)

065-UDP网络通讯使用DatagramSocket及DatagramPacket实现多人聊天案例讲解 本文主要讲解UDP网络通讯的实现原理方法及步骤,使用Swing组件,可视化界面聊天,通过DatagramSocket,DatagramPacket,多线程等技术实现简单聊天程序。 阅读详情

UDP协议提供的服务不同于TCP协议的端到端服务,由于每个数据报中都给出了完整的地址信息,因此无需要建立发送方和接收方的连接。所以它是非连接的,属不可靠协议
因为UDP是非连接的,所以UDP服务端不需要等待客户端的请求以建立连接。另外,UDP服务器为所有通信使用同一套接字,这点与TCP服务器不同,TCP服务器则为每个成功返回的accept()方法创建一个新的套接字。
UDP客户端被动的向等待的服务器发送一个数据报文。如果服务器是启动状态,则会返回数据给客户端UDP套接字在使用前不需要进行连接。
使用UDP方式进行网络通讯时,不需要建立专门的虚拟连接,传输也不是很可靠,如果发送失败则客户端无法获得。UDP传输数据时是有大小限制的,每个被传输的数据报必须限定在64KB之内。 UDP是一个不可靠的协议,发送方所发送的数据报并不一定以相同的次序到达接收方。

UDP 通信方式

  1. 通过DatagramPacket类和DatagramSocket类来使用UDP套接字,客户端和服务器端都通过DatagramSocket的send()方法和receive()方法来发送和接收数据
  2. 用DatagramPacket来包装需要发送或者接收到的数据。发送信息时,Java创建一个包含待发送信息的DatagramPacket实例,并将其作为参数传递给DatagramSocket实例的send()方法
  3. 接收信息时,Java程序首先创建一个DatagramPacket实例,该实例预先分配了一些空间,并将接收到的信息存放在该空间中,然后把该实例作为参数传递给DatagramSocket实例的receive()方法。

UDP客户端创建步骤:

  1. 创建一个DatagramSocket实例,可以有选择地对本地地址和端口号进行设置,如果设置了端口号,则客户端会在该端口号上监听从服务器端发送来的数据
  2. 使用DatagramSocket实例的send()和receive()方法来发送和接收DatagramPacket实例,进行通信
  3. 通信完成后,调用DatagramSocket实例的close()方法来关闭该套接字。

代码实现如下

 //设置接收数据的超时时间
    private static final int TIME_OUT_TIME = 5000;
    //设置重发数据的最多次数
    private static final int MAX_SEND_NUM = 5;

    /**
     * @param client    客户端端口
     * @param ipAddress 服务端ip地址
     * @param server    服务端端口
     * @param str       发生的数据
     * @return
     * @throws Exception
     */
    public static String udpClient(int client, String ipAddress, int server, String str) throws Exception {

        String receive = null;
        byte[] buf = new byte[1024];
        //客户端 监听端口
        DatagramSocket datagramSocket = new DatagramSocket(client);
        InetAddress address = InetAddress.getByName(ipAddress);
        //发送数据端口
        DatagramPacket datagramPacketSend = new DatagramPacket(str.getBytes(), str.getBytes().length, address, server);
        //获取数据缓冲池
        DatagramPacket datagramPacketReceive = new DatagramPacket(buf, 1024);
        //设置接收数据时阻塞的最长时间
        datagramSocket.setSoTimeout(TIME_OUT_TIME);
        //重发次数
        int count = 0;
        boolean receivedResponse = false;

        while (!receivedResponse && count < MAX_SEND_NUM) {
            //发送数据
            datagramSocket.send(datagramPacketSend);
            try {
                //接收从服务端发送回来的数据
                datagramSocket.receive(datagramPacketReceive);
                //如果接收到数据。则将receivedResponse标志位改为true
                receivedResponse = true;
            } catch (InterruptedIOException e) {
                //如果接收数据时阻塞超时,重发并减少一次重发的次数
                count += 1;
            }
        }
        if (receivedResponse) {
            receive = new String(datagramPacketReceive.getData(), 0, datagramPacketReceive.getLength());
            JSONObject jsonObject = JSONObject.parseObject(receive);
            //由于在接收了数据之后,其内部消息长度值会变为实际接收的消息的字节数, 所以这里要将
            // datagramPacketReceive的内部消息长度重新置为1024
            datagramPacketReceive.setLength(1024);
        } else {
            //如果多次重复发送后,仍未获得服务器发送回来的数据
            System.out.println("服务器无响应");
        }
        datagramSocket.close();

        return receive;
    }

UDP服务端创建步骤:

  1. 创建DatagramSocket实例,并且指定端口号,并可以有选择地指定本地地址,此时,服务器已经准备好从任何客户端接收数据报文
  2. 使用DatagramSocket实例的receive()方法接收一个DatagramPacket实例,当receive()方法返回时,数据报文包含了客户端的地址
  3. 使用DatagramSocket实例的send()方法向服务器端返回DatagramPacket实例

具体代码实现如下:

public static void udpServer(int serverPort, int clientPort, String msg) throws IOException {
        byte[] buf = new byte[1024];
        boolean flag = true;
        //服务端口
        DatagramSocket datagramSocket = new DatagramSocket(serverPort);
        DatagramPacket dataReceive = new DatagramPacket(buf, 1024);
        System.out.println("服务器开启,等待客户端访问");

        while (flag) {
            datagramSocket.receive(dataReceive);
            String receiveMessage = new String(dataReceive.getData(), 0, dataReceive.getLength()) +
                    " 来自ip " + dataReceive.getAddress().getHostAddress() + "端口:" + dataReceive.getPort();
            System.out.println(receiveMessage);
            //发送数据到客户端端口上
            DatagramPacket data_send = new DatagramPacket(msg.getBytes(), msg.getBytes().length, dataReceive.getAddress(), clientPort);
            datagramSocket.send(data_send);
            dataReceive.setLength(1024);
        }
        datagramSocket.close();

    }
基于UDP在广域网和局域网都能通信类似QQ的聊天程序 这是一个基于UDP的聊天程序,其可以在广域网和局域网都能通信,具有QQ的聊天功能,代码和可执行程序都有! 立即下载

相关推荐

S32DS使用手把手教程:从零实现CAN通信配置

深入讲解S32DS使用过程中如何从零开始配置CAN通信,涵盖关键步骤与实用技巧,帮助开发者快速上手S32DS使用中的常见问题与调试方法。

weixin_42405592的博客 1124

Java高级技术第三章——java.net包中的TCP/UDP/HTTP及其代理的实现

前言 前言点击此处查看: http://blog.youkuaiyun.com/wang7807564/article/details/79113195 java.net 定义了很多Java网络功能相关的功能,如socket、URI与URL相关、cookies等。 TCP通信 一个普通的socket通信写法很简单,如下: public static void main(Stri...

技术笔记 1416

华为eNSP Pro实战:NE/CE设备SSH远程配置避坑指南

本文针对华为eNSP Pro用户在模拟多台NE路由器或CE交换机时遇到的浏览器卡顿问题,提供了详细的SSH远程配置避坑指南。通过对比浏览器与SSH客户端的资源占用和操作体验,文章详细阐述了为NE和CE设备配置SSH服务的关键步骤、命令差异及常见错误排查方法,旨在帮助用户提升实验效率,实现稳定高效的远程管理。

weixin_29196891的博客 219

Java中的UDP通信

传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,如果使用了 WireShark 工具,可以看到一次TCP连接建立时的整个过程。

QQ156881887的专栏 1554

最新扣子智能体教程:手把手教你接入抖音评论区,实现自动回复

摘要:本文介绍如何利用扣子(Coze)平台搭建智能体实现抖音评论自动回复。从准备工作(账号注册、权限申请)到智能体创建(提示词优化、模型选择),再到抖音API接入和自动回复逻辑设置,详细说明了每个步骤的操作方法。文章还提供了回复模板示例和优化建议,帮助提升互动效率。通过这套方案,创作者可以显著减轻评论区管理压力,增强用户互动体验。(149字)

互联网架构师笔记 982

偏最小二乘回归分析原理详解和案例分析实例

偏最小二乘回归分析原理详解背景偏最小二乘回归分析 Partial least squares regression analysis基本思想建模步骤步骤一:分别提取两变量组的第一对成分,并使之相关性达最大步骤二:建立 y1,⋯ ,yp\boldsymbol{y}_{1}, \cdots, \boldsymbol{y}_{p}y1​,⋯,yp​ 对 u1\boldsymbol{u}_{1}u1​ 的回归及 x1,⋯ ,xm\boldsymbol{x}_{1}, \cdots, \boldsymbol{x}_{

从事脑科学核磁共振方法学研究,在Nature communications等权威期刊发表研究论文,熟练掌握磁共振处理方法和统计学方法,欢迎大家和我交流。 9976

java实现UDP及TCP通信

UDP(User Datagram Protocol)用户数据报协议,TCP(Transmission Control Protocol) 传输控制协议,是传输层的两个重要协议。UDP是一种无连接、不可靠传输的协议。其将数据源IP、目的地IP和端口封装成数据包,不需要建立连接,每个数据包的大小限制在64KB内;发送不管对方是否准备好,接收方收到也不确认,故是不可靠的;可以广播发送,发送数据结束时无需释放资源,开销小,速度快。UDP协议适合于即时通信场景,例如语音通话、视频等。

Super algorithm 的博客,技术爱好者。 2951

【重要内容】敬告读者

由于优快云近期将要搞事情,此专栏建议已购买的用户将内容保存到本地。尚未购买的用户请待9月1日后再决定是否需要购买。如此规则上线,本人将会关闭此专栏。并寻找其他渠道进行发布。

魔落的博客 910

【Java网络编程】基于UDP-Socket 实现客户端、服务器通信

本期为大家带来的是网络编程的 UDP Socket 套接字,基于 UDP协议的 Socket 实现客户端服务器通信,Socket 套接字可以理解为是,传输层给应用层提供的一组 API,如此程序,确定不来看看嘛~~ 更多精彩敬请期待:保护小周ღ *★,°*:.☆( ̄▽ ̄)/$:*.°★* ‘

保护小周ღ的博客 4816

在 FlexSim 中建 AGV 小车模型时,如果设定“每次充电需要 2 小时才能充满”,应该如何配置 AGV 的充电功能?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值。

**My Coding Family** 880

2. Android_逆向的历史与发展

学完本节,希望你能够:了解 Android 逆向工程的发展历程,从早期 APK 破解到现代应用保护;入门先把这几类「在干啥」搞清楚,后面学脱壳、反反调试会顺很多。(反编译 APK 得到的类汇编代码,相当于程序的「菜谱」)就能绕过验证,到后来混淆、加固、反调试一起上,逆向难度越来越高。(第三节 什么是 CPU 指令集),帮你搞清楚「反汇编看到的那些指令」是从哪来的、和 Android 逆向有啥关系。有必要——先搞清「没加固时怎么玩」,再学脱壳和对抗,思路才顺。读起来费劲,但逻辑还在,耐心一点还能跟。

长沙火山 1389

Java的网络编程(TCP/UDP)

首先,想要理解好网络编程,我们需要先理解信息在网络中是如何传递的。这便不得不提一提计算机网络结构中的五层模型。在计算机网络中,信息是通过五层模型中的不同层次进行传递的。五层模型分别为物理层、数据链路层、网络层、传输层和应用层。下面简单介绍一下信息在网络中的传递过程:物理层:物理层是网络模型中最底层的层次,负责将比特流转换成电信号或光信号,并将其发送到网络中的其他设备。物理层的主要任务是定义电气、机械、功能和规程接口,以便将数据传输到其他设备。一般都是肉眼可见的物理介质,比如双胶线、光纤、同轴电缆等等。数据链

qq_59335499的博客 705

《使用R包ggtree进行进化树的绘制与美化》

都2023年了,才去使用Y叔早在2018年发表的进化树构建利器——ggtree。刚好最近在做基因家族分析,进化树的构建与美化确实有点麻烦,先前使用MEGA11进行了绘制,但图像简陋,于是导出了nwk文件,准备使用其他软件进行美化。这里,我使用ggtree包进行操作。

沉香best的博客 6893

java udp类_JAVA编程实现UDP网络通讯的方法示例

本文实例讲述了JAVA编程实现UDP网络通讯的方法。分享给大家供大家参考,具体如下:UDP协议全称是用户数据报协议,在网络中它与TCP协议一样用于处理数据包,是一种无连接的协议。在OSI模型中,在第四层——传输层,处于IP协议的上一层。UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点:也就是说,当报文发送之后,是无法得知其是否安全完整到达的。UDP用来支持那些需要在计算机之间传输数据的网...

weixin_36460573的博客 318

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

java网络编程

什么是Socket socket就是为网络服务提供的一种机制。 通讯的两端都有Sokect 网络通讯其实就是Sokcet间的通讯 数据在两个Sokect间通过IO传输 TCP与UDP区别 udp: 是面向无连接,将数据及源的封装成数据包中,不需要建立连接 每个数据包的大小在限制64k 因无连接,是不可靠协议 不需要建立连接,速度快 Tcp: 建立连接,形成传输数据的通道 ...

qq_38065439的博客 3万+

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

UDP通讯示例

package cn.itcast.udp;import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException;/* 在java中网络通讯业称作为Socket(插座

AaronWang0920的博客 651

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Java高级篇之网络通讯

一、了解现代流行的网络软件的基本架构 1、C/S,client/Server,客户服务器架构的软件 有专门的客户端软件,需要安装在客户电脑上,用户界面可以做得非常复杂,比如股票行情和交易软件。数据的传输量相对比较少,反映会比较快。用户必须要得到安装软件,安装后才能使用,QQ也属于此类。 2、B/S,browser/Server,浏览器服务器架构的软件。 没有客户户端软件,采用浏览器中的网页作为用户界面,受限于设计工具还有浏览器执行引擎,界面不可能太复杂。传输速度相对比较慢,每一次的访问都会完整的下载整份网页

一叶之秋的博客 365

08Socket网络通讯基础

TCP与UDP相关概念 TCP通讯 package Socket网络通讯基础08; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; import java.util....

u011807251的博客 211

Java UTP基础知识

Java 网络通讯基础知识 网络通讯是如何实现的: 1、两台计算机间进行通讯需要以下三个条件: IP地址 协议 端口号 2、IP地址、端口 为实现网络中不同计算机之间的通信,每台计算机都必须有一个唯一的标识—IP地址。而区分一台主机的多个不同应用程序,则是用端口标识,端口号范围为0-65535,其中0-1023位为系统保留。IP地址+端口号组成了所谓的Socket。 3、Socket套接字:...

cyt 704

[学习笔记]Java网络编程之UDP通讯

计算机网络体系结构 1. 体系结构 计算机网络各层及其协议的集合,称为网络的体系结构。目前公认的计算机网络体系结构有概念清楚理论完善的OSI七层协议结构和实际上广泛应用的TCP/IP四层体系结构。 2. 各层概述 应用层:直接为用户的程序提供服务,如支持万维网应用的HTTP协议,支持电子邮件的SMTP协议等。运输层:负责向两个主机中进程之间的通信

Jacob专栏 762

Java学习之路---高级编程(网络通讯TCP,UDP学习)

网络通讯TCP,UDP学习

小牛叹气生活不易的博客 232

UDP协议和TCP协议

1 UDP协议 UDP通讯协议的特点: 将数据封装为数据包。面向无连接。 每个数据包大小限制在64K。 因为无连接,所以不可靠。 因为不需要建立连接,所以速度快。 UDP通讯是不分服务端和客服端的,只分发送端和接收端。 发送端的使用步骤: 建立UDP的服务 准备数据,把数据封装到数据包中发送。发送端的数据包要带上IP地址与端口号 调用UDP的服务,发送数据 关闭资源 /** 1....

shui_zhong_yue的博客 8258

黑马程序员—网络编程之UDP

网络通讯三个要素: 1,IP地址:InetAddress,网络中设备的标识,也可用与其对应的主机名代替。 本地默认回环地址:127.0.0.1 主机名:localhost 2,端口:用于标识进程的逻辑地址,不同进程的标识不同。 有效端口:0~65535,其中0~1024为系统使用或者保留。 3,传输协议:通讯的规则。 常见协议:TCP、UDP。 UDP传输协议的特点: 1,

u013648671的专栏 507

java图形化界面UDP简单的通信

package 实验14; /**  *     只需要在重新复制一个类   修改接口  和 类名  就可以实现简单的通信了      新手所写   大家见谅 *      另外   我的文本区并没有添加滚动面板    还有  如果要添加滚动面板   需要在接收类设置jta1.setCaretPosition(jta1.getText().length());  */ import java....

DESTINY_SELECT的博客 1683

Java TCP/UDP

1. 网络通讯基本要素,寻址IP和应用逻辑端口,定义通讯规则,即协议。 通用协议TCP/IP。 2.网络模型 OSI:应用层封装数据,向下传递数据,应用层继续封装,继而传递到会话层,封装数据,传递到传输层(TCP/UDP),网络层给予数据IP地址,选择底层传输协议,到达物理层(如网线、光纤、无线等),封装成包进行传输。数据包传输到另一台机器,进行数据解析,从物理层开始向上传递,逐层解析拆

RKGG爱吃鱼 406

Java实现的网络编程——基础篇

这几天一直在学习java的网络编程,晚上闲下来也没什么事干。就想写点自己的认识吧。考虑的可能不周到,希望日后有机会在添加吧。对于网络编程,什么TCP、IP、http、URL等等之类刚开始很陌生。不过随着这几天的学习,逐渐有了一些了解了。 首先我想说的是网络模型,很多人立刻就想到了7个层。其实网络模型有两种:OSI(开放系统模型)模型和TCP/IP模型(这种常用)。 OSI模型主要包括7层,从下

XXiaoLEI的专栏 849
上一篇: 百度echarts 在柱状图 折线图 饼图上 显示y轴对应的数据 以及 图形是否能够拖动的设置
下一篇: Java 实现TCP网络编程
Sean_zzZ
博客等级 码龄10年 18粉丝 105原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值