数据报(Datagram)是网络层数据单元在介质上传输信息的一种逻辑分组格式,它是一种在网络中传播的、独立的、自身包含地址信息的消息,它能否到达目的地,到达的时间,到达时内容是否会变化不能准确知道的。它的通讯双方是不需要建立连接的,对于一些不需要很高质量的应用程序来说,数据报通讯是一 个非常好的选择。在Java的java.net包中有两个类DatagramSocket和DatagramPacket,为应用程序中采用数据报通讯方式进行网络通讯。
下面,详细解释在Java中实现客户端与服务器之间数据报通讯的方法,请看:
1) 首先要建立数据报通讯的Socket,我们可以通过创建一个DatagramSocket对象来实现它,在Java中DatagramSocket类有如下两种构造方法:
a) public DatagramSocket() 构造一个数据报socket,并使其与本地主机任一可用的端口连接。若打不开socket则抛出SocketException异常。
b) public DatagramSocket(int port) 构造一个数据报socket,并使其与本地主机指定的端口连接。若打不开 socket或socket无法与指定的端口连接则抛出SocketException异常。
2) 创建一个数据报文包,用来实现无连接的包传送服务。每个数据报文包是用DatagramPacket类来创建,DatagramPacket对象封装了数据报包数据,包长度,目标地址,目标端口。作为客户端要发送数据报文包,要调用DatagramPacket类以如下形式的构造函数创建 DatagramPacket对象,将要发送的数据和包文目的地址信息放入对象之中。
DatagramPacket(byte bufferedarray[],int length,InetAddress address,int port)即构造一个包长度为length的包传送到指定主机指定端口号上的数据报文包,参数length必须小于等于 bufferedarry.length
DatagramPacket类提供了四个类来获取信息
a) public byte[] getData() 返回一个字节数组,包含收到或要发送的数据报中的数据
b) public int getLength() 返回发送或接收到的数据的长度
c) public InetAddress getAddress() 返回一个发送或接收此数据报包文的机器的IP地址
d) public int getPort() 返回发送或接收数据报的远程主机的端口号。
3)创建完DatagramSocket和DatagramPacket对象,就可以发送数据报文包了。发送是通过调用DatagramSocket对象的 send方法实现,它需要以DatagramPacket对象作为参数,将刚才封装进DatagramPa cket对象中的数据组成数据报发出。
4)当然,我们也可以接收数据报文包,为了接收从服务器返回的结果数据报文包,我们需要创建一个新的DatagramPacket对象,这就需要用到 DatagramPacket的另一种构造方式DatagramPacket(byte bufferedarray[],int length),即只需指明存放接收的数据报的缓冲区和长度。调用DatagramSocket对象的receive()方法来完成接收数据报的工作,此时需要将上面创建的 DatagramPacket对象作为参数,该方法会一直阻塞知道收到一个数据报文包,此时DatagramPacket的缓冲区中包 含的就是接收到的数据,数据报文包中也包含发送者的IP地址,发送者机器上的端口号等信息。
5)处理接收缓冲区内的数据,获取服务结果。
6)当通讯完成后,可以使用DatagramSocket对象的close()方法来关闭数据报通讯Socket。当然,Java自己会自动关闭 Socket,释放DatagramSocket和DatagramPacket所占用的资源。但是作为一种良好的编程习惯,还是要显式予以关闭。
分享到:
相关推荐
带你步入J2EE殿堂:最易懂的J2EE...使用Java实现数据报通讯过程 使用Java制作多点发送程序 提高Java代码可重用性的三个措施 用 Java 保存位图文件 用JAVA转换简繁体的基础知识 邮件例程 - JavaMail - 发送HTML邮件
在`Server.java`中,我们通常会实现一个`DatagramSocket`来监听特定的端口,等待接收来自客户端的数据报。`DatagramPacket`用于封装接收到的数据,同时也用于向客户端发送数据。服务器端通常包含一个无限循环,不断...
2. **网络编程**:Java即时通讯客户端的核心是网络编程,涉及到套接字(Socket)编程、输入/输出流(InputStream/OutputStream)、数据报套接字(DatagramSocket)等。客户端通过连接服务器的IP和端口,发送和接收...
标题中的“基于JAVA实现的Modbus通讯模块在温测系统中的应用”揭示了这个主题主要涉及两个关键领域:Java编程语言和Modbus通信协议在温度测量系统中的应用。以下是这两个核心概念的详细解释: 1. **Java编程语言**...
UDP(用户数据报协议)则更注重速度,但不保证数据包的顺序与可靠性,适用于实时性要求高的场景,如在线游戏中的语音聊天。 1. **网络编程**:在Java中,我们通常使用`java.net`包下的Socket和ServerSocket类来实现...
5. **网络协议理解**:理解TCP/IP协议族是至关重要的,包括TCP(传输控制协议)和UDP(用户数据报协议)的区别,HTTP、FTP、SMTP等常见应用层协议的工作原理,以及如何在Java中实现这些协议。 6. **异常处理**:...
Java UDP(User Datagram Protocol)通信是一种基于无连接的数据报协议,用于在互联网上高效地传输数据。相较于TCP,UDP提供了一种轻量级的服务,它不保证数据的顺序、完整性和可靠性,但具有更低的延迟和更高的吞吐...
5. **Java实现RSA加密**: - **java.security.KeyPairGenerator**:用于生成RSA密钥对的类,通常调用其getInstance("RSA")方法初始化,然后用generateKeyPair()生成一对密钥。 - **java.security.PublicKey** 和 *...
本文将详细讨论如何使用卫通星GPS定位器GT06的通信协议,通过Socket进行数据传输,并结合Java与Spring Boot框架实现后台服务的对接。 卫通星GPS定位器GT06是一款基于GSM网络的车载定位设备,它能够实时发送位置、...
根据提供的文件信息,我们可以总结出以下关于“Java实现聊天程序”的相关知识点: ### 1. 程序架构与设计 #### 构造方法及初始化 - **Chat 类**:这是整个聊天程序的核心类,继承自 `JFrame`,实现了 `...
在本项目中,"Java 开发基于JAVA的网络通讯系统设计与实现" 是一个全面的实践教程,旨在探讨如何利用Java编程语言构建高效、可靠的网络通信系统。此资源包括一篇详细论文和一个实际的系统实现,为学习者提供理论与...
在本项目中,"基于JAVA的网络通讯系统设计与实现"是一个典型的IT毕业设计课题,主要探讨了如何利用Java编程语言构建一个网络通信系统。Java因其跨平台性、丰富的类库以及在网络编程上的优势,成为了开发此类系统的...
本文将深入探讨如何利用Java语言对接中控门禁控制器C100型号,实现发卡、发密码、开门以及查看开门记录等功能。 首先,我们需要了解中控门禁控制器C100的基本特性。C100是一款功能齐全的门禁控制器,具备刷卡、密码...
《基于JAVA的网络通讯系统设计与实现》是一个深入探讨如何使用Java语言构建高效、可靠的网络通信系统的项目。这个系统,通常被称为LW+系统,涵盖了网络编程的核心概念和技术,是学习和理解Java在网络通信领域应用的...
在本项目中,"基于Java的网络通讯项目设计与实现"深入探讨了如何利用Java语言构建网络通信系统。这个项目不仅包含了一份详细的项目说明报告,还提供了实际的源代码,为学习者提供了一个完整的实践平台。以下是该项目...
- UDP(用户数据报协议)是无连接的、不可靠的传输协议。Java通过DatagramSocket和DatagramPacket类支持UDP通信。 4. **多线程编程**: - 网络通信中常常涉及到并发处理,Java的线程模型使得开发者可以同时处理多...
2. **UDP通信**:UDP(用户数据报协议)则是一种无连接的、不可靠的传输协议,适合对实时性要求较高的场景。Java提供了DatagramSocket和DatagramPacket类来处理UDP通信。 3. **输入/输出流**:在网络通信中,数据...
- TCP(传输控制协议)是面向连接的、可靠的协议,而UDP(用户数据报协议)则是一种无连接、不可靠的数据传输方式。 2. **Socket通信**: - Socket是网络通信中的一个端点,通过它,应用程序可以与其他网络上的...