Java中提供了DatagramSocket来实现这个功能
1.服务器端的程序
- 创建Socket,监听6666端口
- 读取来自客户端的“数据包”,创建数据包(通过DatagramPacket实现数据包的创建)
- 接收数据包
- 从数据包中,读取数据(通过recieve()接收数据和send()发送给数据)
代码如下:
package com.ztt.udp.Demo01;import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;public class UdpServer {public static void main(String[] args) {//创建Socket,监听6666端口try (DatagramSocket serverSocket = new DatagramSocket(6666)) {//读取来自客户端的数据包//创建数据包byte[] buff=new byte[1024];DatagramPacket packet=new DatagramPacket(buff,buff.length);//接收数据包serverSocket.receive(packet);System.out.println("读取完毕!");//从数据包中,读取数据byte[] data=packet.getData();String strFormClient=new String(data);System.out.println("来自客户端的信息:"+strFormClient);if("天王盖地虎".equals(strFormClient)) {packet.setData("宝塔镇河妖".getBytes());}else {packet.setData("哈哈哈哈哈哈哈".getBytes());}//反馈信息给客户端(发送数据包至客户端)serverSocket.send(packet);} catch (SocketException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}
2.客户端的程序
- 创建socket
- 连接指定主机的端口(客户端使用clientSocket.connect()指定远程地址和端口)
- 创建数据包
- 发送数据包(通过recieve()接收数据和send()发送给数据)
代码如下:
package com.ztt.udp.Demo01;import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;public class UdpClient {public static void main(String[] args) {//创建sockettry (DatagramSocket clientSocket = new DatagramSocket()) {//连接指定主机的端口clientSocket.connect(InetAddress.getByName("192.168.199.112"),6666);//创建数据包DatagramPacket packet=new DatagramPacket(new byte[1024],1024);packet.setData("甜甜是甜甜".getBytes());//将数据放入数据包//发送数据包clientSocket.send(packet);//等待接受反馈信息(等待接收来自服务端的数据包)clientSocket.receive(packet);byte[] data=packet.getData();String strFormClient=new String(data);System.out.println("来自服务端的信息:"+strFormClient);} catch (SocketException e) {e.printStackTrace();} catch (UnknownHostException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}