UDP协议:无需建立虚拟链路,协议是不可靠的。
A节点以DatagramSocket发送数据包,数据报携带数据,数据报上还有目的目地地址,大部分情况下,数据报可以抵达;但有些情况下,数据报可能会丢失 --丢失了也不管。

先了解2个类:
DatagramSocket:相当于“码头”,此类表示用来发送和接收数据报的套接字。
DatagramPacket:代表数据报。

举例说明1:
服务器端

public class SimpleUDPServer {final static int SERVER_PORT = 30000;final static int PACKET_SIZE = 4092;public static void main(String[] args) {DatagramSocket datagramSocket = null;DatagramPacket datagramPacket = null;try {while (true) {// 创建datagramSocket,准备用于发送和接收数据报datagramSocket = new DatagramSocket(SERVER_PORT);datagramPacket = new DatagramPacket(new byte[PACKET_SIZE],PACKET_SIZE);// 使用一个空的packet去装datagramSocket接收到的数据datagramSocket.receive(datagramPacket);// 将datagramPacket中接收到的字节数组转换为字符串,然后输出System.out.println(new String(datagramPacket.getData(), 0,datagramPacket.getLength()));}} catch (IOException e) {e.printStackTrace();}}
}

客户端:

public class SimpleUDPClient {final static int SERVER_PORT = 30000;public static void main(String[] args) {DatagramSocket datagramSocket = null;DatagramPacket datagramPacket = null;try {// 创建datagramSocket,准备用于发送和接收数据报// datagramSocket使用动态端口(以便选择一个空闲的端口)datagramSocket = new DatagramSocket();String content = "Java学习系列(十八)Java面向对象之基于UDP协议的网络通信";// 创建一个有数据、有目的地址的datagramPacketdatagramPacket = new DatagramPacket(content.getBytes(), content.getBytes().length, InetAddress.getByAddress(new byte[] {(byte) 192, (byte) 168, 0, 8 }), SERVER_PORT);// 发送数据报datagramSocket.send(datagramPacket);} catch (IOException e) {e.printStackTrace();}}
}

MulticastSocket将数据报发送到“广播地址”,数据报会被自动“广播”到所有加入该IP地址的客户端。
TTL是控制数据可以跨过多少个网段。
--当ttl为0时,说明该数据报只能停留在本机;
--当ttl为1时,说明数据报只能停留在当前局域网。
--当ttl为32时,说明数据报只能停留在本站点的网络。
--当ttl为64时,说明数据报只能停留在本地区。
--当ttl为128时,说明数据报只能停留在本大洲(如亚洲)。
--当ttl为255时,说明数据报达到全球。

Java学习系列(十八)Java面向对象之基于UDP协议的网络通信相关推荐

  1. Java学习系列(十六)Java面向对象之基于TCP协议的网络通信

    TCP/IP的网络分层模型:应用层(HTTP/FTP/SMTP/POPS...),传输层(TCP协议),网络层(IP协议,负责为网络上节点分配唯一标识),物理层+数据链路层). IP地址用于标识网络中 ...

  2. Java学习系列(十九)Java面向对象之数据库编程

    JDBC(Java Data Base Connectivity:java数据库连接):它定义了一组标准的操作数据库的接口,既然是接口,那它就是一种规范,是Java操作数据库的技术规范. Java数据 ...

  3. Java学习系列(十二)Java面向对象之序列化机制及版本

    序列化:内存中的Java对象<-->二进制流 目的:a)有时候需要把对象存储到外部存储器中持久化保存,b)还有时候,需要把对象通过网络传输. 可序列化的对象,Java要求可序列化的类实现下 ...

  4. Java学习系列(十五)Java面向对象之细谈线程、线程通信(下)

    竞争资源(共享资源):如果有多条线程需要并发访问.并修改某个对象,该对象就是"竞争资源".为了避免多个线程"自由竞争"修改共享资源所导致的不安全问题. 线程同步 ...

  5. Java学习系列(十四)Java面向对象之细谈线程、线程通信(上)

    线程与进程的关系: 进程 --运行中的程序.进程有如下特征: 1).独立性.拥有自己的资源,拥有自己独立的内存区. 通常来说,一个进程的内存空间,是不允许其他进程访问的. 但像Windows,如A进程 ...

  6. Java学习系列(十)Java面向对象之I/O流(上)

    IO流 我们知道应用程序运行时数据是保存在内存中的,但由于内存中的数据不可持久保存(如断电或程序退出时数据会丢失),因此需要一种手段将数据写入硬盘或读入内存.面向IO流编程就是一种很好的选择.IO:I ...

  7. 高龄白菜java学习第九十八、九天(java数据结构和算法(17))

    文件的压缩和解压(其余部分复用上面) //将一个文件压缩/*** @param srcFile 要压缩的文件的全路径* @param dstFile 压缩后要保存在哪里的全路径*/public sta ...

  8. Java 基础系列(十六) --- Java中模板引擎的使用

    模板引擎 1 关于动态页面的渲染 2 非模板引擎的弊端 3 模板引擎 3.1 什么是模板引擎? 3.2 Thymeleaf 语法 3.3 模板引擎的使用 4 总结 1 关于动态页面的渲染   渲染就是 ...

  9. 【Python学习系列十八】基于scikit-learn库逻辑回归训练模型(delta比赛代码3)

    为了得到一致假设而使假设变得过度严格称为过拟合.避免过拟合是分类器设计中的一个核心任务.通常采用增大数据量和测试样本集的方法对分类器性能进行评价.由于比赛中样本量是一致,目标测试集也是既定,所以我的思 ...

最新文章

  1. kwargs.pop是什么意思
  2. 洛谷P2766-最长递增子序列问题
  3. zabbix报错:Zabbix服务启动不了
  4. MyBatis-动态SQL
  5. Firefox浏览器中,input输入框输入的内容在刷新网页后为何还在?
  6. linux串口boost,Boost串口通信第一课 boost::asio::serial_port基本使用
  7. 【Rxjs】 - 解析四种主题Subject
  8. Spring Boot 学习之路二 配置文件 application.yml
  9. win8系统下用VMware虚拟机启动Windows Server 2008报错问题解决方法
  10. SylixOS SylixOS CAN总线驱动之三
  11. js与设计模式----简单工厂
  12. python photoshop自动化_你会用Python 搞定你的电子签名吗?
  13. 视频教程-细说HTML(HTML+HTML5)-HTML5/CSS
  14. JS——背景色的滑动效果以及输入框的状态切换效果实现
  15. 仰望星空,脚踏实地 2016
  16. 2021CSDN粉丝年度严选文章TOP10榜单出炉~浅看超人气盘点
  17. html如何载入图片,CSS如何插入图片?
  18. 字节一面:“为什么网络要分层?每一层的职责、包含哪些协议?”
  19. Linux检测硬盘坏道 与 修复
  20. IDEA报错 Cannot resolve method ‘xxx‘ in ‘xxx‘

热门文章

  1. display:table与本身的table的区别
  2. linux主机名包含点
  3. 华为2017.7.26机试
  4. python之HTTP处理模块urllib和urllib2
  5. Redis笔记(六)Redis的消息通知
  6. 通过VMName获取VM IP
  7. symbian使用活动对象时返回-2147483647错误值的解决办法
  8. 有1000阶的台阶,一个人每次只能走一阶或两阶,用一个递归算法求出共有多少种走法。...
  9. MyEclipse持续性开发教程:用JPA和Spring管理数据(三)
  10. Java程序员是如何面试上阿里巴巴,如何拿到年薪50W