1.基本概念:
a.DatagramPacket与DatagramSocket位于java.net包中
b.DatagramPacket表示存放数据的数据报,DatagramSocket表示接受或发送数据报的套接字
c.由这两个类所有构成的网络链接是基于UDP协议,是一种不可靠的协议。
之所以不可靠是因为发送方不负责数据是否发送成功,接收方收到数据时也不会 向发送方反馈成功消息,容易导致信息的丢失。
但是这种协议却是快捷的,比如CS(半条命)游戏就是基于UDP协议,否则我们估计 要玩一次游戏后就会把机子砸了,所以我们可以看到游戏有时会失帧。
2.使用方法:
要建立基于UDP协议的链接,我们应该先建立套接字<DatagramSocket>(即发送站或接收站),之后通过套接字发送或接受数据<DatagramPacket>。
我们先了解一下DatagramSocket和DatagramPacket类
DatagramSocket类:
构造方法:
DatagramSocket():
表示创建一个默认的套接字,并绑定到本地地址和一个随机的端口号
DatagramSocket(int port):
与上面不同的是,绑定到特定端口号,其它不变
DatagramSocket(int port, InetAddress iad):
表示创建一个套接字,绑定到特定的端口号及指定地址
DatagramSocket(SocketAddress sad);
表示创建一个套接字,绑定到特定的套接字地址
小提示:所谓的本地地址我们可以这样来理解,我们通过“控制面板-本地连接-支持”中可以看到一个IP地址,这就是本地的IP地址,也暂且理解为本地地址。
基本方法:
close():
关闭套接字
recevie(DatagramPacket dp):
接受数据报
send(DatagramPacket dp):
发送数据报
这里触及了数据报,下面介绍数据报:
DatagramPacket类:
构造方法:(只列出主要的)
接受类型:
DatagramPacket(byte[] buf, int length):
用来接受长度为length的buf数据(即数据存于字节数组buf中)
发送类型:
DatagramPacket(byte[] buf, int length, InetAddress address, int port);
将length长的buf数据发送到指定的地址的端口号处
DatagramPacket(byte[] buf, int length, SocketAddress address);
将length长的buf数据发送到指定的套接字地址处
有上面可知,我们发送数据时构造的数据报应该是发送类型的,而接受数据报时应该是接受类型的
开始书写代码
代码意图:
1.一个接收方,一个发送方
2.当接收方收到发送方发送的消息后,打印发送的消息及发送方的地址和端口号,之后向发送反馈一条信息“接受方:我收到了!”
3.发送方打印出接收方反馈的消息
详细思路见代码:
- import java.net.DatagramPacket;
- import java.net.DatagramSocket;
- import java.net.InetAddress;
- public class Sender {
- public static void main(String[] args) {
- try {
- // 创建发送方的套接字,IP默认为本地,端口号随机
- DatagramSocket sendSocket = new DatagramSocket();
- // 确定要发送的消息:
- String mes = "你好!接收方!";
- // 由于数据报的数据是以字符数组传的形式存储的,所以传转数据
- byte[] buf = mes.getBytes();
- // 确定发送方的IP地址及端口号,地址为本地机器地址
- int port = 8888;
- InetAddress ip = InetAddress.getLocalHost();
- // 创建发送类型的数据报:
- DatagramPacket sendPacket = new DatagramPacket(buf, buf.length, ip,
- port);
- // 通过套接字发送数据:
- sendSocket.send(sendPacket);
- // 确定接受反馈数据的缓冲存储器,即存储数据的字节数组
- byte[] getBuf = new byte[1024];
- // 创建接受类型的数据报
- DatagramPacket getPacket = new DatagramPacket(getBuf, getBuf.length);
- // 通过套接字接受数据
- sendSocket.receive(getPacket);
- // 解析反馈的消息,并打印
- String backMes = new String(getBuf, 0, getPacket.getLength());
- System.out.println("接受方返回的消息:" + backMes);
- // 关闭套接字
- sendSocket.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
- import java.net.DatagramPacket;
- import java.net.DatagramSocket;
- import java.net.InetAddress;
- import java.net.SocketAddress;
- public class Receive {
- public static void main(String[] args) {
- try {
- // 确定接受方的IP和端口号,IP地址为本地机器地址
- InetAddress ip = InetAddress.getLocalHost();
- int port = 8888;
- // 创建接收方的套接字,并制定端口号和IP地址
- DatagramSocket getSocket = new DatagramSocket(port, ip);
- // 确定数据报接受的数据的数组大小
- byte[] buf = new byte[1024];
- // 创建接受类型的数据报,数据将存储在buf中
- DatagramPacket getPacket = new DatagramPacket(buf, buf.length);
- // 通过套接字接收数据
- getSocket.receive(getPacket);
- // 解析发送方传递的消息,并打印
- String getMes = new String(buf, 0, getPacket.getLength());
- System.out.println("对方发送的消息:" + getMes);
- // 通过数据报得到发送方的IP和端口号,并打印
- InetAddress sendIP = getPacket.getAddress();
- int sendPort = getPacket.getPort();
- System.out.println("对方的IP地址是:" + sendIP.getHostAddress());
- System.out.println("对方的端口号是:" + sendPort);
- // 通过数据报得到发送方的套接字地址
- SocketAddress sendAddress = getPacket.getSocketAddress();
- // 确定要反馈发送方的消息内容,并转换为字节数组
- String feedback = "接收方说:我收到了!";
- byte[] backBuf = feedback.getBytes();
- // 创建发送类型的数据报
- DatagramPacket sendPacket = new DatagramPacket(backBuf,
- backBuf.length, sendAddress);
- // 通过套接字发送数据
- getSocket.send(sendPacket);
- // 关闭套接字
- getSocket.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
- 转自:http://blog.csdn.net/pengchua/article/details/4398972
相关推荐
在标签中提到的"源码"和"工具",暗示我们可以通过查看`DatagramSocket`和`DatagramPacket`的源码来理解其内部实现,同时,这些类是Java标准库的一部分,是开发网络应用时的常用工具。通过熟练掌握这两个类的使用,...
Java中的`DatagramSocket`是实现用户数据报协议(UDP)通信的核心类。UDP是一种无连接的、不可靠的传输层协议,相比TCP,它在效率和速度上有优势,但不保证数据的顺序和完整性。在Java网络编程中,`DatagramSocket`...
在Java网络编程领域中,`DatagramSocket` 是一个重要的类,它主要用于实现无连接的数据报服务,即UDP(User Datagram Protocol)协议。与面向连接的TCP(Transmission Control Protocol)不同,UDP是一种尽力而为的...
在Java的网络编程中,`DatagramSocket`和`DatagramPacket`是两个核心的类,它们用于实现UDP(User Datagram Protocol)协议的通信。UDP是一种无连接的、不可靠的传输层协议,适合于对实时性要求较高但对数据完整性...
在Java中,我们使用`java.net.DatagramSocket`类来创建一个UDP套接字,用于发送和接收数据报。`DatagramPacket`类用于封装我们要发送的数据和目标地址。以下是一个简单的UDP客户端示例: ```java import java.io....
随着互联网技术的不断发展与普及,网络编程成为现代软件开发中不可或缺的一部分。Java作为一种广泛应用的编程语言,提供了丰富的API支持网络编程,尤其是对于套接字(Socket)编程的支持。本文将详细介绍Java套接字...
Java中使用`java.net.DatagramSocket`和`java.net.DatagramPacket`类进行UDP编程。以下是一个简单的UDP服务器端和客户端示例: ```java // 服务器端 DatagramSocket serverSocket = new DatagramSocket(9999); // ...
在Java中,我们通常使用`java.net.DatagramSocket`类来处理UDP通信。这个类允许我们发送和接收UDP数据报(DatagramPacket)。首先,我们需要创建一个服务器端,它监听特定的端口,接收来自客户端的数据报,进行大小...
在Java中,我们可以使用java.net包中的DatagramSocket和DatagramPacket类来进行UDP通信。 DatagramSocket用于创建一个UDP套接字,它可以发送和接收数据报。发送数据时,我们需要创建一个DatagramPacket对象,包含要...
1. 创建DatagramSocket:在Java中,我们首先需要创建一个DatagramSocket实例来绑定一个端口,这个端口用于接收和发送数据。例如: ```java DatagramSocket socket = new DatagramSocket(12345); ``` 这里的12345是...
总结来说,Java中的UDP网络编程涉及到创建和管理`DatagramSocket`,构造和解析`DatagramPacket`,以及处理可能的异常情况。开发者需要根据实际需求选择合适的方式实现数据的高效传输,同时注意处理可能出现的数据...
根据给定文件的信息,我们可以提炼出关于Java软件开发中涉及Datagram套接字的重要知识点,以及相关的背景知识。以下是对这些知识点的详细解读: ### 1. Java基础概述 #### 1.1 什么是Java Java是一种广泛使用的...
首先,我们来看一下UDP通信中的两个主要类:`DatagramPacket`和`DatagramSocket`。 1. `DatagramPacket`类: - `DatagramPacket`用于封装数据,并指定目标IP地址和端口号。在Java中,你可以通过它的构造函数设置...
在 Java 中,UDP 编程使用 DatagramPacket 和 DatagramSocket 两个类来实现。DatagramPacket 是数据报包,DatagramSocket 是进行端到端通信的类。DatagramPacket 中包含要传输的数据和目的 Socket 的信息。 端口号...
在Java中,我们可以使用`java.net.DatagramSocket`类来实现UDP通信。接下来,我们将详细讨论如何在Java中发送和接收UDP报文。 一、发送UDP报文 发送UDP报文主要涉及以下几个步骤: 1. **创建DatagramSocket**:...
这篇博客“转 Java校正电脑时间(java 时间同步)”主要探讨了如何在Java中实现这一功能。 首先,Java中的日期和时间API包括`java.util.Date`、`java.util.Calendar`,以及从Java 8开始引入的更现代的`java.time`包。...
在Java中,我们首先创建一个`DatagramSocket`对象,然后创建一个`DatagramPacket`,指定要发送的数据(通常是字节数组)、目标IP地址和端口号。接着,调用`DatagramSocket.send()`方法将数据报发送出去。例如,`new...
在Java中,我们可以使用java.net包中的DatagramSocket类和DatagramPacket类来实现UDP通信。 服务端的实现通常涉及以下步骤: 1. **创建DatagramSocket**:服务端首先需要创建一个DatagramSocket实例,这会绑定到...
在Java中,我们可以使用java.net包中的DatagramSocket类来实现UDP的通信。下面将详细介绍如何实现UDP的发送、接收以及端口监听。 **UDP发送** 在Java中,使用DatagramSocket类创建一个发送端的socket实例。首先创建...
在`UDPServer.java`中,通常会创建一个`DatagramSocket`实例,监听特定的端口,然后进入一个循环,不断接收`DatagramPacket`。接收数据时,`DatagramSocket.receive()`方法会阻塞,直到有数据到达。收到数据后,...