Java实现UDP通信(附带实例)
TCP 通信是一种基于连接的通信,也就是说在传输数据前必须先建立连接,所以它的操作比较复杂,比如涉及输入流输出流。然而对于有些场景在不要求可靠性的情况下可以使用 UDP 通信,它不必建立连接,大大简化了通信流程。
DatagramSocket 类实现了 UDP 套接字功能,该类位于 java.net 包中。该类包含了下面三种构造方法:
对于 UDP 编程,虽然也有分服务器端和客户端,但是两端都使用 DatagramSocket 类,这点与 TCP 编程不同。UDP 的服务器端代码如下所示:
客户端的代码如下所示:
服务器端的输出结果:
客户端的输出结果:
DatagramSocket 类实现了 UDP 套接字功能,该类位于 java.net 包中。该类包含了下面三种构造方法:
DatagramSocket() DatagramSocket(int port) DatagramSocket(int port, InetAddress laddr)
- 第一种表示创建 UDP 套接字对象但不绑定端口;
- 第二种表示创建 UDP 套接字对象并且绑定指定端口;
- 第三种表示创建 UDP 套接字对象并且绑定指定端口和 IP 地址。
对于 UDP 编程,虽然也有分服务器端和客户端,但是两端都使用 DatagramSocket 类,这点与 TCP 编程不同。UDP 的服务器端代码如下所示:
public class UDPSocketServer { public static void main(String[] args) { try { DatagramSocket ds = new DatagramSocket(8888); byte[] buf = new byte[5]; DatagramPacket dp = new DatagramPacket(buf, buf.length); System.out.println("开始等待接收数据"); ds.receive(dp); System.out.println("接收到数据:" + new String(buf)); ds.close(); } catch (Exception e) { e.printStackTrace(); } } }首先创建 DatagramSocket 对象并绑定本地 端口,然后创建 DatagramPacket 对象并调用 receive() 方法阻塞等待接收数据,一旦有客户端发送数据过来它就会接收数据并往下执行。
客户端的代码如下所示:
public class UDPSocketClient { public static void main(String[] args) { try { DatagramSocket ds = new DatagramSocket(); InetAddress ip = InetAddress.getByName("localhost"); ds.connect(ip, 8888); byte[] data = "hello".getBytes(); DatagramPacket dp = new DatagramPacket(data, data.length); System.out.println("发送数据"); ds.send(dp); ds.close(); } catch (Exception e) { e.printStackTrace(); } } }首先创建 DatagramSocket 对象,然后调用 connect() 方法连接指定的服务器端,接着创建 DatagramPacket 对象并将数据放入后调用 send() 方法即可完成发送。
服务器端的输出结果:
开始等待接收数据
接收到数据:hello
客户端的输出结果:
开始发送数据