`
roomy
  • 浏览: 51063 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用Java控制UDP协议

    博客分类:
  • J2SE
阅读更多

UDP协议

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

为什么要使用UDP

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

Java中操纵UDP

使用位于JDKJava.net包下的DatagramSocketDatagramPacket类,可以非常方便地控制用户数据报文。在描述它们之前,必须了解位于同一个位置的InetAddress类。InetAddress实现了Java.io.Serializable接口,不允许继承。它用于描述和包装一个Internet IP地址,通过三个方法返回InetAddress实例:

getLocalhost():返回封装本地地址的实例。

getAllByName(String host):返回封装Host地址的InetAddress实例数组。

getByName(String host):返回一个封装Host地址的实例。其中,Host可以是域名或者是一个合法的IP地址。

DatagramSocket用于创建接收和发送UDPSocket实例。和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

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

DatagramPacket类用于处理报文,它将Byte数组、目标地址、目标端口等数据包装成报文或者将报文拆卸成Byte数组。应用程序在产生数据包是应该注意,TCP/IP规定数据报文大小最多包含65507,通常主机接收548个字节,但大多数平台能够支持8192字节大小的报文。 DatagramPacket类的构建器共有4个:

DatagramPacket(byte[] buf, int length, InetAddress addr, int port):从buf数组中,取出Length长的数据创建数据包对象,目标是addr地址,port端口。

DatagramPacket(byte[] buf, int offset, int length, InetAddress address, int port):从buf数组中,取出offset开始的、length长的数据创建数据包对象,目标是addr地址,port端口。

DatagramPacket(byte[] buf, int offset, int length):将数据包中从offset开始、length长的数据装进buf数组。

DatagramPacket(byte[] buf, int length):将数据包中length长的数据装进buf数组。

DatagramPacket类最重要的方法就是getData()了,它从实例中取得报文的Byte数组编码

实例说明

{接收数据的服务器}

byte[] buf = new byte[1000];
//
开始监视12345端口
DatagramSocket ds = new DatagramSocket(12345);
//
创建接收数据报的实例
DatagramPacket ip = new DatagramPacket(buf, buf.length);
while (true)
{
   //
阻塞,直到收到数据报后将数据装入IP
   //receive
方法返回时,DatagramPacket的缓冲区填充了接收的数据,数据报包包含
   //
发送方的 IP 地址和发送方机器上的端口号。此方法在接收到数据报前一直阻塞。
   ds.receive(ip);
   System.out.println(new String(buf));
}

 

{发送数据的客户端}

//得到目标机器的地址实例
InetAddress target = InetAddress.getByName("www.lenovo.com");
//
9999端口发送数据报
DatagramSocket ds = new DatagramSocket(9999);
//
要发送的数据
String hello = "Hello, I am come in!";
//
将数据转换成Byte类型
byte[] buf = hello.getBytes();
//
buf缓冲区中的数据打包
DatagramPacket op = new DatagramPacket(buf, buf.length, target, 12345);
//
发送数据
ds.send(op);
//
关闭连接
ds.close();

 

 

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    使用Java控制UDP协议.rar_使用UDP协议_数据包

    UDP在网络中用于处理数据包,本文实现在java中操纵UDP.

    java控制UDP协议

    使用Java控制UDP协议下载,UDP协议的全称是用户数据报,在网络中它与TCP协议一样用于处理数据包

    基于UDP协议的视频图像传输的研究与实现

    然后,根据视频网络传输的要求扩展了UDP协议,给UDP数据包定义了一个8个字节的包头结构,用来传送数据包的序列号、时戳等信息,且在发送端对传输进行光滑化处理,严格控制数据包发送间隔,减小了传输延迟,减小了...

    使用Java JDK中Java[1].net包控制UDP协议

    好东西,java jdk的好东西

    基于UDP的GBN协议 模拟丢包 java

    传输层使用的仍是UDP,但在应用层使用滑动窗口技术,并通过模拟TCP的一些机制以保证UDP的低协议处理开销和获得高通信可靠性。 在开始传输前,不进行tcp的3次握手。 在开始传输的过程中,发送方向接收方发送分组。此时...

    基于UDP传输控制协议和GUI开发的聊天窗口程序

    基于UDP传输控制协议和GUI开发的聊天窗口程序,可以启动多次main程序,实现一个IP地址,多个监听口。有聊天窗口,方便使用

    基于UDP协议的Socket编程

    为发送数据,要将数据封装到DatagramPacket中,使用DatagramSocket发送该包。为接收数据,要从DatagramSocket中接收一个DatagramPacket对象,然后解析该包的内容。DatagramPacket类和DatagramSocket 类均位于Java...

    封闭式Java Socket代码

    封闭式Java Socket代码,提供TCP UDP 阻塞和非阻塞的方法,无需知道具体实现方式,只需要Main.java(Server)Main2.java(Client)Main(UDP)三个例程,简单建立联接。SocketIO接口提供精简化的方法,一体化输入输出,...

    java源码包---java 源码 大量 实例

     基于JAVA的UDP服务器模型源代码,内含UDP服务器端模型和UDP客户端模型两个小程序,向JAVA初学者演示UDP C/S结构的原理。 简单聊天软件CS模式 2个目标文件 一个简单的CS模式的聊天软件,用socket实现,比较简单。 ...

    TCP/IP java 编程

    传输层通常以TCP和UDP协议来控制端点到端点的通信。Socket定义了通信的端点,是由IP地址和端口号组成。JAVA语言已经成为现今网络应用中最广泛的语言,本文就是介绍JAVA中的Socket套接字以及通信的实现。 关键字:...

    JAVA上百实例源码以及开源项目

     基于JAVA的UDP服务器模型源代码,内含UDP服务器端模型和UDP客户端模型两个小程序,向JAVA初学者演示UDP C/S结构的原理。 简单聊天软件CS模式 2个目标文件 一个简单的CS模式的聊天软件,用socket实现,比较简单。 ...

    JAVA上百实例源码以及开源项目源代码

     基于JAVA的UDP服务器模型源代码,内含UDP服务器端模型和UDP客户端模型两个小程序,向JAVA初学者演示UDP C/S结构的原理。 简单聊天软件CS模式 2个目标文件 一个简单的CS模式的聊天软件,用socket实现,比较简单。 ...

    java源码包4

     基于JAVA的UDP服务器模型源代码,内含UDP服务器端模型和UDP客户端模型两个小程序,向JAVA初学者演示UDP C/S结构的原理。 简单聊天软件CS模式 2个目标文件 一个简单的CS模式的聊天软件,用socket实现,比较简单。 ...

    java源码包3

     基于JAVA的UDP服务器模型源代码,内含UDP服务器端模型和UDP客户端模型两个小程序,向JAVA初学者演示UDP C/S结构的原理。 简单聊天软件CS模式 2个目标文件 一个简单的CS模式的聊天软件,用socket实现,比较简单。 ...

    java面试题库2021.pdf

    ②网际控制报文协议 ICMP ③因特网的路由器选择协议 4、 应用层 ①域名系统 DNS ②电子邮件NOWCODER.COM 牛客网——互联网学习求职必备神器 名企校招历年笔试面试真题, 尽在牛客网 牛客网, 互联网人都在用的学习...

    java源码包2

     基于JAVA的UDP服务器模型源代码,内含UDP服务器端模型和UDP客户端模型两个小程序,向JAVA初学者演示UDP C/S结构的原理。 简单聊天软件CS模式 2个目标文件 一个简单的CS模式的聊天软件,用socket实现,比较简单。 ...

    基于Java的视频会议系统(软件程序+WORD论文文档).zip

    那么选择UDP协议,即用户数据报协议(User Datagram Protocol,UDP),就成为一种必然。 Socket是网络上运行的两个程序间双向通讯的一端,它既可以接受请求,也可以发送请求,利用它可以较为方便的编写网络上数据的...

    java jdk实列宝典 光盘源代码

    使用smtp协议发送简单邮件; 发送带附件的邮件; 给多人发送邮件; 使用pop3接收邮件; 19jsp与servlet 获取客户端的真实ip地址; jsp无刷新聊天室; 设置和读取cookie; 上传文件; 用servlet生成图形验证码; 用servlet...

    疯狂JAVA讲义

    学生提问:当我们使用编译C程序时,不仅需要指定存放目标文件的位置,也需要指定目标文件的文件名,这里使用javac编译Java程序时怎么不需要指定目标文件的文件名呢? 13 1.5.3 运行Java程序 14 1.5.4 根据...

    JAVA基础课程讲义

    TCP协议和UDP协议 189 区别 189 TCP协议 189 UDP协议 190 JAVA网络编程 190 InetAddress 190 InetSocketAddress 191 URL类 191 基于TCP协议的SOCKET编程和通信 193 UDP通讯的实现 201 思考作业 203 上机作业(分组...

Global site tag (gtag.js) - Google Analytics