什么是UDP协议 UDP协议的全称是用户数据报,在网络中它与TCP协议一样用于处理数据包。在OSI模型中,在第四层——传输层,处于IP协议的上一层。UDP有不提供数据报分组、组装和不能对数据包的排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。

为什么要使用UDP 在选择使用协议的时候,选择UDP必须要谨慎。在网络质量令人不十分满意的环境下,UDP协议数据包丢失会比较严重。但是由于UDP的特性:它不属于连接型协议,因而具有资源消耗小,处理速度快的优点,所以通常音频、视频和普通数据在传送时使用UDP较多,因为它们即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。

比如我们聊天用的ICQ和OICQ就是使用的UDP协议。 在Java中操纵UDP 使用位于JDK中Java。net包下的DatagramSocket和DatagramPacket类,可以非常方便地控制用户数据报文。 在描述它们之前,必须了解位于同一个位置的InetAddress类。

InetAddress实现了Java。io。 Serializable接口,不允许继承。它用于描述和包装一个Internet IP地址,通过三个方法返回InetAddress实例: getLocalhost():返回封装本地地址的实例。 getAllByName(String host):返回封装Host地址的InetAddress实例数组。

getByName(String host):返回一个封装Host地址的实例。其中,Host可以是域名或者是一个合法的IP地址。 DatagramSocket类用于创建接收和发送UDP的Socket实例。和Socket类依赖SocketImpl类一样,DatagramSocket类的实现也依靠专门为它设计的DatagramScoketImplFactory类。

DatagramSocket类有3个构建器: DatagramSocket():创建实例。这是个比较特殊的用法,通常用于客户端编程,它并没有特定监听的端口,仅仅使用一个临时的。 DatagramSocket(int port):创建实例,并固定监听Port端口的报文。

DatagramSocket(int port, InetAddress localAddr):这是个非常有用的构建器,当一台机器拥有多于一个IP地址的时候,由它创建的实例仅仅接收来自LocalAddr的报文。 值得注意的是,在创建DatagramSocket类实例时,如果端口已经被使用,会产生一个SocketException的异常抛出,并导致程序非法终止,这个异常应该注意捕获。

DatagramSocket类最主要的方法有4个: Receive(DatagramPacket d):接收数据报文到d中。receive方法产生一个“阻塞”。 Send(DatagramPacket d):发送报文d到目的地。 SetSoTimeout(int timeout):设置超时时间,单位为毫秒。

Close():关闭DatagramSocket。在应用程序退出的时候,通常会主动释放资源,关闭Socket,但是由于异常地退出可能造成资源无法回收。所以,应该在程序完成时,主动使用此方法关闭Socket,或在捕获到异常抛出后关闭Socket。

“阻塞”是一个专业名词,它会产生一个内部循环,使程序暂停在这个地方,直到一个条件触发。

全部

jdk中java_怎样使用JavaJDK中Java?相关推荐

  1. 关于使用JAVA中JDK安装和在命令行中编译和运行程序的一些总结

    JDK安装:http://www.oracle.com/technetwork/java(可以选择安装路径) (在写下载这个JDK时需要先创建账户) 1.下载完之后就可以安装了,安装路径自己可以设置, ...

  2. JDK源码解析 迭代器模式在JAVA的很多集合类中被广泛应用,接下来看看JAVA源码中是如何使用迭代器模式的。

    JDK源码解析 迭代器模式在JAVA的很多集合类中被广泛应用,接下来看看JAVA源码中是如何使用迭代器模式的. 看完这段代码是不是很熟悉,与我们上面代码基本类似.单列集合都使用到了迭代器,我们以Arr ...

  3. 容器安装java_在docker容器中安装Java(从宿主机向docker容器中拷贝文件)

    操作系统 [root@Optimus /]# uname -a Linux Optimus 2.6.32-504.el6.x86_64 #1 SMP Wed Oct 15 04:27:16 UTC 2 ...

  4. java低层源码_如何查看javaJDK中底层源码

    展开全部 在初次使用java时,往往我32313133353236313431303231363533e4b893e5b19e31333363393735们对最基本的java类会忽略对其内部基本的实现 ...

  5. jsb调用java_在JS代码中使用反射调用java代码注意事项(附webview使用方法)(转)...

    本文是推荐使用过jsb.reflection的开发者进行阅读.关于jsb.reflection的说明请参照: 我们在代码编写过程中,通常会需要在js脚本中调用到java代码或者Objective-C的 ...

  6. adobe reader java_请问,如何用JAVA读PDF文件在浏览器中显示,不需要在本地系统中安装Adobe Reader。求java代码...

    JAVA读PDF可以实现,重点是如何在网页中显示PDF文件,而且不需要安装AdobeReader.没有安装AdobeReader,在网页显示PDF文件时,浏览器会提示下载.请问如何在网页中显示PDF文 ...

  7. JavaJDK中的命令行工具

    JavaJDK中的命令行工具 本文内容主要学习自<深入理解Java虚拟机>,超赞的一本书强烈推荐! 一,常用JDK监控和故障处理工具 命令名称 全称 用途 jstat JVM Statis ...

  8. Unix中的I/O模型和Java NIO

    Unix网络编程中的五种I/O模型 阻塞式I/0.非阻塞I/O.I/O复用.信号驱动式I/O.异步I/O 以一个网络输入为例,一个输入操作通常包括两个不同的阶段: 等待数据准备好,将数据从内核拷贝到进 ...

  9. JDK与JRE及其在Eclipse中的使用

    转载自:http://blog.csdn.net/gx1058742912/article/details/51033942 JDK与jRE的区别 JDK(java development kit): ...

最新文章

  1. 计算机科学与技术类高水平国际学术刊物,莘莘学子 | 计算机科学与技术学院本科生薛传雨在国际期刊上发表高水平学术论文...
  2. R语言dplyr包使用bind_rows函数纵向合并两个dataframe(行生长)、使用bind_cols函数横向合并两个dataframe(列生长)
  3. SpringCloud学习笔记:SpringCloud简介(1)
  4. JavaFX图表(五)之气泡图
  5. 搭建基于Jenkins的CI服务器
  6. 循环序列模型 —— 1.7 对新序列采样
  7. CCF认证训练行动路线图
  8. JS获取DropDownList的value值与text值
  9. TP-Link 886nV6 刷第三方系统回忆
  10. 提升睡眠质量:程序猿工作伴侣(睡眠革命)
  11. android 获取经纬度的三种方法,Android中如何获取经纬度
  12. Pareto最优解 Pareto分布
  13. 在移动硬盘分区上装Win10系统,并在Mac上使用双系统
  14. 【轮子】有权二部图中的最大匹配、最小匹配python轮子
  15. 《需求工程--软件建模与分析》笔记
  16. Altium Designer(二)——原理图(SchDoc)的绘制
  17. “掌商工程”让海派盆景与白领互添绿意
  18. python基本语法学习笔记
  19. GitHub 高星开源项目今日发起
  20. [机器学习]K近邻算法及其应用--WEKA工具

热门文章

  1. python数据分析笔记中panda(2)
  2. asp.net winform 实现复制,粘贴,剪切功能
  3. InfoPath中的Rich Text Box中如何加“回车”
  4. linux的基础知识——全局变量异步I/O
  5. 毕设ssm商城系统_ssm商城系统(爱淘淘购物)项目源码
  6. l360废墨收集垫清零_知识分享003:EPSON L360打印机出现故障-废墨计数清零
  7. arm linux漏洞,GitHub - armjirawat/linux-kernel-exploits: linux-kernel-exploits Linux平台提权漏洞集合...
  8. mybatis insert 重复数据2条_Mybatis框架lt;增gt;:添加一条数据到数据库中,insert...
  9. ubuntu报错E: 无法获得锁 /var/cache/apt/archives/lock - open (11: 资源暂时不可用)E: 无法对目录 /var/cache/apt/archives/
  10. 常见25种深度学习模型的github代码