2022Java学习笔记七十八(网络编程:UDP通信,一发一收,多发多收消息接收实现)

一、快速入门
DatagramPacket:数据包对象



实例代码
定义发送端

package com.zcl.d8_udp1;import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;/*发送端 一发一收*/
public class ClientDemo {public static void main(String[] args) throws Exception {System.out.println("-------客户务端--------");// 创建发送端对象:发送端自带的端口号DatagramSocket socket = new DatagramSocket();// 2、创建一个数据包对象封装数据/*** 参数一:封装要发送的数据* 参数二:发送数据的大下* 参数三:服务器IP地址* 参数四:服务的的端口*/byte[] buffer = "iu覆盖哈怂分红四".getBytes();DatagramPacket packet = new DatagramPacket(buffer,buffer.length, InetAddress.getLocalHost(),8881);// 发送数据出去socket.send(packet);// 释放资源socket.close();}
}

定义服务端接收

package com.zcl.d8_udp1;import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;/*接收端*/
public class ServerDemo2 {public static void main(String[] args) throws Exception {System.out.println("-------启动服务端--------");// 1、创建接收端对象,注册端口DatagramSocket socket = new DatagramSocket(8881);// 2、创建一个数据包对象接收数据byte[] buffer = new byte[1024 * 64];DatagramPacket packet = new DatagramPacket(buffer,buffer.length);// 3、等待接收数据socket.receive(packet);// 4、取出数据// 读取多少取多少int len = packet.getLength();String rs = new String(buffer,0,len);System.out.println("收到数据:"+rs);// 获取发送端的ip和端口String ip = packet.getSocketAddress().toString();System.out.println("发送端的地址:"+ip);int port = packet.getPort();System.out.println("对方端口:"+port);/*-------启动服务端--------收到数据:iu覆盖哈怂分红四*/// 释放资源socket.close();}
}

关于启动:先启动服务的再启动发送端,返回服务端的输出就可以看到打印出来接收的数据==

二、使用UDP实现多发和多收

实例代码

package com.zcl.d9_udp2;import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner;/*发送端 多发多收*/
public class ClientDemo {public static void main(String[] args) throws Exception {System.out.println("-------客户务端--------");// 创建发送端对象:发送端自带的端口号DatagramSocket socket = new DatagramSocket();// 2、创建一个数据包对象封装数据/*** 参数一:封装要发送的数据* 参数二:发送数据的大下* 参数三:服务器IP地址* 参数四:服务的的端口*/Scanner sc = new Scanner(System.in);while (true) {System.out.println("请输入需要发送的信息:");String msg = sc.nextLine();byte[] buffer = msg.getBytes();DatagramPacket packet = new DatagramPacket(buffer,buffer.length, InetAddress.getLocalHost(),8881);//退出判断if("exit".equals(msg)){System.out.println("离线成功");socket.close(); // 释放资源break;}// 发送数据出去socket.send(packet);}}
}

实例代码

package com.zcl.d9_udp2;import java.net.DatagramPacket;
import java.net.DatagramSocket;/*接收端*/
public class ServerDemo2 {public static void main(String[] args) throws Exception {System.out.println("-------启动服务端--------");// 1、创建接收端对象,注册端口DatagramSocket socket = new DatagramSocket(8881);// 2、创建一个数据包对象接收数据byte[] buffer = new byte[1024 * 64];DatagramPacket packet = new DatagramPacket(buffer,buffer.length);while (true) {// 3、等待接收数据socket.receive(packet);// 4、取出数据// 读取多少取多少int len = packet.getLength();String rs = new String(buffer,0,len);System.out.println("接收到了来自:"+packet.getSocketAddress().toString()+",端口号为:"+packet.getPort()+"的信息:"+rs);}}
}

三、广播和组播

UDP如何实现广播
使用广播地址:255.255.255.255

具体操作:
① 发送端发送的数据包的目的地写的是广播地址、且指定端口。(255.255.255.255, 9999)
② 本机所在网段的其他主机的程序只要匹配端口成功即就可以收到消息了。(9999)

UDP如何实现组播
使用组播地址:224.0.0.0~239.255.255.255

具体操作:
① 发送端的数据包的目的地是组播IP(例如:224.0.1.1,端口:9999)
② 接收端必须绑定该组播IP(224.0.1.1),端口还要对应发送端的目的端口9999,这样即可接收该组播消息。
③DatagramSocket的子类MulticastSocket可以在接收端绑定组播IP。

2022Java学习笔记八十八(网络编程:UDP通信,一发一收,多发多收消息接收实现)相关推荐

  1. OpenCV学习笔记(十六)——CamShift研究 OpenCV学习笔记(十七)——运动分析和物体跟踪Video OpenCV学习笔记(十八)——图像的各种变换(cvtColor*+)imgproc

    OpenCV学习笔记(十六)--CamShift研究 CamShitf算法,即Continuously Apative Mean-Shift算法,基本思想就是对视频图像的多帧进行MeanShift运算 ...

  2. OpenCV学习笔记(十八):凸包,最小包围区域算子:convexHull(),minAreaRect(),minEnclosingTriangle(),minEnclosingCircle()

    OpenCV学习笔记(十八):凸包,最小包围区域算子:convexHull(),minAreaRect(),minEnclosingTriangle(),minEnclosingCircle() 1. ...

  3. MATLAB学习笔记(十八)

    MATLAB学习笔记(十八) 一.Simulink仿真基础 1.1 Simulink的启动 1.2 系统仿真模型的创建 1.3 仿真参数的设置 1.4 总结 二.子系统的创建与封装 2.1 子系统的创 ...

  4. 嵌入式系统设计师学习笔记二十八:嵌入式程序设计③——高级程序设计语言

    嵌入式系统设计师学习笔记二十八:嵌入式程序设计③--高级程序设计语言 解释程序和编译程序 编译器的工作阶段示意图 语法错误:非法字符,关键字或标识符拼写错误 语法错误:语法结构出错,if--endif ...

  5. Linux学习笔记(3)- 网络编程以及范例程序

    Linux学习笔记(3)- 网络编程以及范例程序 前言 网络介绍 IP地址的介绍 端口和端口号的介绍 通信流程 socket介绍 TCP介绍 python3编码转换 TCP客户端程序开发流程 多任务版 ...

  6. Mr.J-- jQuery学习笔记(二十八)--DOM操作方法(添加方法总结)

    Table of Contents appendTo appendTo(source, target) 源代码 append prependTo ​ ​ ​ ​ prependTo源码 prepend ...

  7. 计算机二级C语言学习笔记(十八)

    上一篇:计算机二级C语言学习笔记(十七) 程序填空题(二) 题型二:平均值 首先求和,然后将和除以项数 ===================================== ========== ...

  8. Linux学习笔记(十八) -- 运行程序,出现Failed to load module canberra-gtk-module错误的解决方案

    1.错误内容 错误描述 执行程序时,提示如下错误: Failed to load module "canberra-gtk-module" 2.解决方案 (1)执行语句: sudo ...

  9. html响应式布局的概念,HTMLCSS学习笔记(十八)响应式布局概念

    原标题:HTMLCSS学习笔记(十八)响应式布局概念 常见的布局方案 固定布局:以像素作为页面的基本单位,不管设备屏幕及浏览器宽度,只设计一套尺寸: 可切换的固定布局:同样以像素作为页面单位,参考主流 ...

最新文章

  1. java输入hello_详解JAVA输出Hello World
  2. Selenium | 网上教程
  3. 45 个常用Linux 命令,让你轻松玩转Linux!
  4. 移动应用可以通过微信沟通接口连接公众号 微信涨粉多了一个新通道
  5. python中的def函数括号里的默认值_Python中的默认参数值
  6. 设计一个方法,可以实现任意范围内的随机数
  7. 如何改变WINDOWS服务的启动顺序(Win2000)
  8. Ubuntu16.04 安装Teamviewer
  9. 2021-1-30Linux学习纪要
  10. 最新Python爬取淘宝评论(2020年4月)
  11. Ubuntu20.04安装Nvidia显卡驱动
  12. 一组NOKIA数据线电路图及制作图例
  13. Telink BLE MESH开发|ble mesh开发教程《二》telink_sig_mesh增加调试信息打印
  14. 第4章第14节:图表:使用折线图表制作电脑销量趋势图 [PowerPoint精美幻灯片实战教程]
  15. cpu亲和力总结taskset和setcpu及其他相关
  16. 中国十大1至3岁童车品牌辐轮王土拨鼠世界儿童自行车品牌排行榜
  17. 闪电贷攻击攻击屡试不爽,DeFi一周被盗超1600万美元
  18. 使用python实现科学记数法的书面形式输出
  19. Linux环境中安装zookeeper
  20. 【CH376】使用CH376控制U盘-读写文件

热门文章

  1. APP性能测试关注点详细介绍
  2. Open3D 渐进式形态学滤波
  3. 面试官:说一说 Docker 原理
  4. springmvc中拦截器
  5. 视神经萎缩学计算机专业好吗,治视神经萎缩的维生素 视神经萎缩有哪些症状...
  6. DDR4、GDDR5、GDDR6内存的区别
  7. 802.11基本元素概念介绍
  8. 爬虫图片mysql_爬取微博图片数据存到Mysql中遇到的各种坑\爬取微博图片\Mysql存储图片\微博爬虫...
  9. 【lphtw】第五弹笔记ex41-ex46
  10. DEEP COMPRESSION: COMPRESSING DEEP NEURAL NETWORKS WITH PRUNING, TRAINED QUANTIZATION AND HUFFMAN