`
luliangok
  • 浏览: 776202 次
文章分类
社区版块
存档分类
最新评论

Java数据报(UDP)编程

 
阅读更多

一般说明

在TCP/IP协议族中,UDP和TCP同样位于传输层,用户数据报是UDP协议中的概念.

UDP协议提供面向事务的简单不可靠信息传送服务,它不提供对 IP 协议的可靠机制、流控制以及错误恢复功能.

UDP 协议基本上是IP 协议与上层协议的接口,从整个用户数据在各层的包装看,UDP报文格式相当简单:

16 32bit
Source port源端口 Destination port目标端口
Length 报文长度(单位是字节,包括首部和用户数据区) Checksum(校验和)
Data


由于校验和的原因,UDP还引入了伪首部,这导致了UDP和IP层的关系过于密切,破坏了分层原则.

Java数据报支持

包java.net中提供了两个类DatagramSocket和DatagramPacket用来支持数据报通信,DatagramSocket用于在程序之间建立传送数据报的通信连接, DatagramPacket则用来表示一个数据报。

DatagramSocket代表发送和接收数据报的套接字,一个数据报套接字是为包递送服务的发送和接收点,在一个数据报套接字上,每个被发送和接收的包都被独立的寻址和路由,从一台机器到另一台机器上发送的多个包有不同的路由,任意的抵达顺序.

对于DatagramSocket,UDP广播发送总是使能的(那是缺省设置).为了接收广播包这个类实例应该绑定到通用地址(wildcard address).在某些实现中,当被绑定到更多特定地址上的时候广播包也可以接收.

例如:

DatagramSocket s = new DatagramSocket(null);
s.bind(new InetSocketAddress(8888));
这等同于:
DatagramSocket s = new DatagramSocket(8888);
两种情况都会创建一个能在端口8888上接收广播的DatagramSocket实例.

<!-- ======== NESTED CLASS SUMMARY ======== --><!-- =========== FIELD SUMMARY =========== --><!-- ======== CONSTRUCTOR SUMMARY ======== --><!-- -->

Constructor Summary
DatagramSocket()
Constructs a datagram socket and binds it to any available port on the local host machine.
protected DatagramSocket(DatagramSocketImplimpl)
Creates an unbound datagram socket with the specified DatagramSocketImpl.
DatagramSocket(intport)
Constructs a datagram socket and binds it to the specified port on the local host machine.
DatagramSocket(intport, InetAddressladdr)
Creates a datagram socket, bound to the specified local address.
DatagramSocket(SocketAddressbindaddr)
Creates a datagram socket, bound to the specified local socket address.

其中,port指明socket所使用的端口号,如果未指明端口号,则把socket连接到本地主机上一个可用的端口。laddr指明一个可用的本地地址。给出端口号时要保证不发生端口冲突,否则会生成SocketException类例外。

用数据报方式编写通信程序时,通信双方,首先都要建立一个DatagramSocket对象,用来接收或发送数据报,然后使用DatagramPacket类对象作为传输数据的载体。下面看一下DatagramPacket的构造方法 :

Constructor Summary
DatagramPacket(byte[]buf, intlength)
Constructs a DatagramPacket for receiving packets of length length.
DatagramPacket(byte[]buf, intlength, InetAddressaddress, intport)
Constructs a datagram packet for sending packets of length length to the specified port number on the specified host.
DatagramPacket(byte[]buf, intoffset, intlength)
Constructs a DatagramPacket for receiving packets of length length, specifying an offset into the buffer.
DatagramPacket(byte[]buf, intoffset, intlength, InetAddressaddress, intport)
Constructs a datagram packet for sending packets of length length with offset ioffsetto the specified port number on the specified host.
DatagramPacket(byte[]buf, intoffset, intlength, SocketAddressaddress)
Constructs a datagram packet for sending packets of length length with offset ioffsetto the specified port number on the specified host.
DatagramPacket(byte[]buf, intlength, SocketAddressaddress)
Constructs a datagram packet for sending packets of length length to the specified port number on the specified host.

可以看出,有两个供接收的构造器和四个供发送的构造器.其中,buf中存放数据报数据,length为数据报中数据的长度,address和port旨明目的地址,offset指明了数据报的位移量。

Java组播支持

MulticastSocket 多播数据报套接字。这个组播套接字对于收发IP多播数据包是很有用的,它扩展了DatagramSocket,在其上附加了加入internet上多播组的方法。一个多播组由D类IP地址和标准UDP端口指定,D类IP范围是224.0.0.0 to 239.255.255.255,其中224.0.0.0被保留不为它用。

它有三个构造器:

Constructor Summary
MulticastSocket()
Create a multicast socket.
MulticastSocket(intport)
Create a multicast socket and bind it to a specific port.
MulticastSocket(SocketAddressbindaddr)
Create a MulticastSocket bound to the specified socket address.

基本上,没有指定端口,只为发送,指定端口可收发,多址主机会用套接字地址。

一,DatagramSocket类;DatagramPacket类;InetAddress类

构造函数 public DatagramSocket();
public DatagramSocket(int port);
public DatagramSocket(InetAddress laddr);

close()方法

send(DatagramPacket p)

receive(DatagramPacket p)

接受方的DatagramPacket public DatagramPacket(byte[]buf, intlength)
发送方的DatagramPacketpublic DatagramPacket(byte[]buf, intlength, InetAddressaddress, intport

最简单的UDP程序:

发送程序:UdpSend.java

importjava.net.*;
publicclassUdpSend
...{
publicstaticvoidmain(String[]args)throwsException
...{
DatagramSocketds
=newDatagramSocket();
Stringstr
="helloworld";
DatagramPacketdp
=newDatagramPacket(str.getBytes(),str.length(),
InetAddress.getByName(
"192.168.0.25"),3000);
ds.send(dp);
ds.close();
}

}

接收程序:UdpRecv.java

importjava.net.*;
publicclassUdpRecv
...{
publicstaticvoidmain(String[]args)throwsException
...{
DatagramSocketds
=newDatagramSocket(3000);
byte[]buf=newbyte[1024];
DatagramPacketdp
=newDatagramPacket(buf,1024);
ds.receive(dp);
StringstrRecv
=newString(dp.getData(),0,dp.getLength())+
"from"+dp.getAddress().getHostAddress()+":"+dp.getPort();
System.out.println(strRecv);
ds.close();
}

}

分享到:
评论

相关推荐

    Java中实现UDP协议编程的方法

    什么是UDP协议 UDP协议的全称是用户数据报,在网络中它与TCP协议一样用于处理数据包。在OSI模型中,在第四层——传输层,处于IP协议的上一层。UDP有不提供数据报分组、组装和不能对数据包的排序的缺点,也就是说,...

    java使用udp协议和硬件进行数据收发处理

    java使用udp协议进行数据收发处理,java使用udp协议进行数据收发处理

    java网络编程,UDP,发送16进制报文。

    通过j2se upd网络编程,发送报文。我这里只是客户端,修改数据库连接,主要是把数据库里面的图片(base64编码处理),拆成包,发送给服务端。

    java网络编程实现udp数据发送与接收的简单实例.zip

    java网络编程实现udp数据发送与接收的简单实例.zip java网络编程实现udp数据发送与接收的简单实例.zip

    广州大学网络编程实验二代码(UDP编程)

    UDP协议在IP协议之上添加的功能虽然非常有限,但...通过完成本实验项目,巩固以前所学的面向对象的分析和设计技术,掌握UDP套接字的编程范型,熟悉Java对UDP协议的支持类的编程接口,并能熟练运用于UDP协议应用编程中。

    java编程实现基于UDP协议传输数据的方法

    主要介绍了java编程实现基于UDP协议传输数据的方法,较为详细的分析了UDP协议的原理及Java编程实现数据传输客户端与服务器端的相关技巧,需要的朋友可以参考下

    计算机网络课程设计报告-UDP编程.docx

    1、Java.net.DatagramScoket类和Java.net.DatagrmPacket类可以实现UDP编程,前者实现与目标主机的连接 (这种连接不需要目标主机的认可),后者用于封装UDP包。 2、发送UDP包时,先将数据包装成DatagramPacket对象,...

    java Udp编程

    java UDPUDP 只在 IP 的数据报服务之上增加了很少一点的功能,即端口的功能和差错检测的功能 UDP在发送数据之前不需要连接。 UDP 的主机不需要维持复杂的连接状态表。 UDP 用户数据报只有8个字节的首部开销

    MFC之UDP编程

    第一次作业 简单的网络应用程序编写 利用socket编写一个简单的网络应用程序,获取服务器...2)分别采用流式套接字和数据报套接字进行实现。 3)可以使用C/C++或Java编程语言。 代码齐全!!!!MFC整个项目都在里面

    Java2游戏编程.pdf

    2.2.7 Java数据类型、数组和标识符需要记忆的要点 2.3 Java中的运算符 2.3.1 赋值运算符 2.3.2 比较运算符 2.3.3 算术运算符 2.3.4 自增和自减运算符 2.3.5 更多的整数运算符 2.3.6 使用点运算符 2.3.7 instanceof...

    java pptJava 中的网络编程

    java课程ppt,第11章 Java 中的网络编程, 1. URL类 2. 读取URL中的资源 3. 显示URL资源中的HTML文件 4. 处理超链接 5. InetAddress类 6. 套接字Socket 7. 使用多线程处理套接字连接 8. UDP数据报 9. 广播数据包

    Java网络编程之UDP协议数据传输

    一、UDP数据传输方式 数据传递采用数据包方式传递,所有的数据要进行打包操作,并且没有对应的客户端服务器概念,有且只有发送段和接收端。 Socket 套接字 数据需要进行传递操作,在数据传递的两台计算机当中必须有...

    Java入门1·2·3——一个老鸟的Java学习心得 高清pdf

    第3篇为Java语言编程进阶,包括Java编程常用知识、Java文件编程、Java文件I/O编程、Java TCP编程、Java UDP编程、Java Swing编程、JDBC编程,最后还给出了一个聊天程序实例和一个数据表操作窗口实例,将Swing、UDP、...

    java编程100例

    java编程100实例,适合初学java的朋友学习,含有源代码,省去了码代码的时间,可以直接导入,运行。建议实用eclipse,内容如下: 实例1 产生自己的控件 实例2 控件的排布示例 实例3 控件的相互控制与消息传递 实例4 ...

    Java入门1·2·3:一个老鸟的Java学习心得.rar 超清

    第3篇为Java语言编程进阶,包括Java编程常用知识、Java文件编程、Java文件I/O编程、Java TCP编程、Java UDP编程、Java Swing编程、JDBC编程,最后还给出了一个聊天程序实例和一个数据表操作窗口实例,将Swing、UDP、...

    Java Socket Udp实时在线云消费机服务器端源码.rar

    Java Socket Udp协议实时在线云消费机服务器端开发示例,本示例展示了Java监听UDP通讯端口,向端口发送信息,只需在本示例上加上数据库的增、删、查、改等操作就可快速完成实时一卡通消费系统。

    第13章-Java网络编程-Java面向对象程序设计教程-微课视频版-程杰-清华大学出版社.pptx

    13.1 TCP/IP协议简介 13.2 网络开发中的常用工具类 13.3 面向连接的TCP通信 13.4 无连接的UDP通信 13.5 UDP广播通信 13.6 局域网通信工具 第13章 Java网络编程 第13章-Java网络编程-Java面向对象程序设计教程-微课...

    Java_TCPIP_Socket经典网络编程

    ...8 1.4 客户端和服务器.8 1.5 什么是套接字..........9 1.6 练习..........10 第2章基本套接字..........10 2.1 套接字地址..........UDP套接字发送和接收信息..........38 2.4 练习..........40 第3章发送和接收数据

    Java NIO实例UDP发送接收数据代码分享

    主要介绍了Java NIO实例UDP发送接收数据代码分享,分享了客户端和服务端完整代码,小编觉得还是挺不错的,共需要的朋友参考。

Global site tag (gtag.js) - Google Analytics