18.5 UDP数据报通信
用户数据报协议(UDP)是一种无连接的客户/服务器通信协议。它不保证数据报会被对方完全接收,也不保证它们抵达的顺序与发出时一样,但它的速度比TCP/IP协议要快得多。所以,对于某些不需要保证数据完整准确的场合,或是数据量很大的场合(比如声音、视频)等,通常采用UDP通信。另外在局域网中,数据丢失的可能性很小,也常采用UDP通信。
UDP通信中,需要建立一个DatagramSocket,与Socket不同,它不存在"连接"的概念,取而代之的是一个数据报包--DatagramPacket。这个数据报包必须知道自己来自何处,以及打算去哪里。所以本身必须包含IP地址、端口号和数据内容。
18.5.1 DatagramSocket的使用方法
DatagramSocket可以用来创建收、发数据报的socket对象。如果用它来接收数据,应该用下面这个创建方法:
public DatagramSocket(int port) throws SocketException |
其中,参数port指定接收时的端口。
如果用来发送数据,应该用这个:
public DatagramSocket() throws SocketException |
所有的端口、目的地址和数据,需要由DatagramPacket来指定。
接收数据时,可以使用它的receive(DatagramPacket data)方法。获取的数据报将存放在data中。发送数据时,可以使用它的send(DatagramPacket data)方法。发送的端口、目的地址和数据都在data中。
相关推荐
- 使用 `DatagramSocket` 的 `send()` 方法发送数据: ```java ds.send(op); ``` 3. **接收数据:** - 创建用于接收数据的 `DatagramPacket` 对象: ```java byte[] buf = new byte[1000]; DatagramPacket...
然而,DataGramSocket类提供了一个`connect()`方法,这可能会引起一些误解,因为UDP本身并不支持像TCP那样的连接建立过程。 `connect()`方法在DataGramSocket中主要有两个重载形式: 1. `public void connect...
在“java DatagramSocket 的上传文件客户端”中,开发者使用`DatagramSocket`创建一个可以发送和接收UDP数据报的套接字。这个客户端可能实现了TFTP(Trivial File Transfer Protocol)服务,TFTP是一个简单的小型...
- 使用`send(DatagramPacket packet)`方法发送数据报。`DatagramPacket`对象包含要发送的数据和目标地址信息。 3. **接收数据报**: - 使用`receive(DatagramPacket packet)`方法接收数据报。此操作是阻塞的,...
`DatagramSocket`的主要方法包括: 1. `bind(SocketAddress localAddr)`: 绑定本地地址和端口,使得数据报可以通过这个端口发送和接收。 2. `send(DatagramPacket dp)`: 发送一个`DatagramPacket`到指定的目标地址...
最后,使用 DatagramSocket 对象的 send 方法将数据报发送到目的主机,并使用 receive 方法接收来自其他主机的数据报。 在本文中,我们将详细介绍如何使用 Java 实现基于 UDP 的聊天程序,并提供了一个简单的示例...
- **关闭DatagramSocket**:使用`close()`方法关闭DatagramSocket,释放网络资源。 2. **DatagramPacket类**: - **构造DatagramPacket**:通过`DatagramPacket(byte[] data, int length, InetSocketAddress ...
在发送数据时,需要使用 DatagramSocket 的 send 方法将数据包发送出去,而在接收数据时,需要使用 DatagramSocket 的 receive 方法来接收数据包。 知识点三:实验实现 实验中,使用 Java 实现了一个简单的客户端-...
4. **接收数据**: 创建一个空的DatagramPacket,然后使用DatagramSocket的receive方法接收数据。receive方法会阻塞直到接收到一个数据报,然后将数据存入DatagramPacket对象。 5. **多线程处理**: 通常,我们会在一...
4. 接收数据:使用`DatagramSocket.receive(DatagramPacket)`方法接收来自服务器的数据。这个方法会阻塞直到有数据到达,因此通常在一个单独的线程中执行。 5. 处理通信逻辑:在这个程序中,实现了三次来回通信。...
简单的UDP聊天程序,服务器端:创建DatagramSocket对象用于打开指定端口并监听,然后用创建一个DatagramPacket,利用DatagramSocket中的receive(ds)方法接收数据并放到刚创建的DatagramPacket对象中; 这样就完成...
3. 使用DatagramSocket的send方法发送DatagramPacket。 4. 使用DatagramSocket的receive方法接收数据。 5. 使用完后关闭DatagramSocket。 在实际开发中,开发者需要根据应用需求选择合适的通信方式。TCP适用于需要...
在接收端,我们同样使用`DatagramSocket`,但需要创建一个`DatagramPacket`来接收数据: ```java import java.net.DatagramPacket; import java.net.DatagramSocket; public class UdpReceiver { public static ...
4. 如果需要回应,可以构造新的DatagramPacket并使用DatagramSocket的send方法将其发送回客户端。 客户端的创建类似,只是它首先构造一个DatagramPacket,包含要发送的数据和服务器的地址信息,然后调用...
4. **发送响应**:处理完数据后,服务端可以使用DatagramPacket和DatagramSocket的send方法将响应发送回客户端。 ```java String response = "Server received your message!"; byte[] sendBuffer = response....
5. **接收数据**: 使用`DatagramSocket.receive(DatagramPacket packet)`方法接收数据包。接收前需要先创建一个DatagramPacket实例,并提供接收数据的缓冲区大小。 6. **数据包处理**: 数据包的发送和接收过程中,...
3. 使用DatagramSocket的receive()方法接收来自客户端的数据包,该方法会返回一个DatagramPacket对象,包含接收到的数据和发送方的信息。 4. 处理接收到的数据,可能包括解码、解析等操作。 5. 如果需要回应,可以...
DatagramSocket提供了接收和发送数据报的方法:public void receive(DatagramPacket dst)throws IOException和public void send(DatagramPacket src)throws IOException。 示例程序 EchoServer与EchoClient就利用...
- 循环接收DatagramPacket,使用DatagramSocket的receive方法。 - 将接收到的数据写入到文件,可能需要根据序列号重组文件内容。 在"Day9UDP"这个文件中,可能包含了关于如何实现Java UDP文件传输的详细步骤和...
开发者通过创建`DatagramSocket`实例来建立一个UDP连接,然后使用`send(DatagramPacket packet)`方法发送`DatagramPacket`对象,以及`receive(DatagramPacket packet)`方法接收数据包。`DatagramSocket`提供了监听和...