`
mmdev
  • 浏览: 12949445 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

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...

    2024年java面试题-网络编程TCP、UDP、Socket、Http等面试题

    网络编程的本质是多台计算机之间的数据交换。数据传递本身没有多大的...本资料是关于Java网络方面的面试题,包含TCP、UDP、HTTP、Socket等相关的资料,还是很不错的,里面有八股文,有图文讲解,还是有得借鉴的!!!

    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章发送和接收数据

Global site tag (gtag.js) - Google Analytics