UDP实现客户端与服务端的通信

一个简单的UDP服务器实现,用于监听来自客户端的UDP数据包,并根据接收到的内容发送响应。这段代码展示了如何使用Java的DatagramSocketDatagramPacket类来创建一个简单的UDP服务器,该服务器能够接收客户端发送的UDP数据包,并根据接收到的内容发送响应。

1.在try-with-resources语句中,创建了一个DatagramSocket实例serverSocket,并指定它监听5666端口。try-with-resources语句确保serverSocket在使用完毕后能够自动关闭,以释放系统资源。

2.分配了一个1024字节的缓冲区buff

3.使用这个缓冲区创建了一个DatagramPacket实例packet。这个数据包将用于接收从客户端发送的数据。

4.调用serverSocket.receive(packet);方法阻塞当前线程,直到接收到一个数据包。接收到的数据包将填充到之前创建的packet实例中。

5.打印"读取完毕"以指示数据包已被接收。

packet中获取数据字节数组。

将字节数组转换为字符串,并去除前后的空白字符。

打印出接收到的来自客户端的信息。

服务端代码:

package A15;
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(5666);) {
			// 读取来自客户端的“数据包”
			// 创建数据包
			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).trim();
			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();
		}
	}

}

这段代码是一个简单的UDP客户端实现,用于向指定的UDP服务器发送数据并接收来自服务器的响应。这段代码展示了如何使用Java的DatagramSocketDatagramPacket类来创建一个简单的UDP客户端,该客户端能够向指定的UDP服务器发送数据并接收来自服务器的响应。

1.创建一个DatagramPacket实例packet,并为其分配一个1024字节的缓冲区。

2.使用"天王盖地虎".getBytes()将字符串转换为字节数组,并通过packet.setData(...)方法设置这些数据为数据包的内容。

3.调用clientSocket.send(packet);方法将数据包发送到之前通过connect方法指定的服务器地址和端口。

4.调用clientSocket.receive(packet);方法阻塞当前线程,直到接收到一个数据包。由于之前调用了connect方法,这个数据包必须来自指定的服务器地址和端口。

5.从packet中获取数据字节数组。

6.将字节数组转换为字符串

客户端代码:

package A15;
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) {
		// 创建Socket
		try (DatagramSocket clientSocket = new DatagramSocket()) {
			// 连接指定主机的端口
			clientSocket.connect(InetAddress.getByName("192.168.199.119"), 5666);
			// 创建数据包
			DatagramPacket packet = new DatagramPacket(new byte[1024], 1024);
			packet.setData("天王盖地虎".getBytes());
			// 发送数据包 
			clientSocket.send(packet);
			//等待接受反馈信息(等待接受来自服务端的数据包)
			clientSocket.receive(packet);
			byte[]data=packet.getData();
			String strFromServer=new String(data);
			System.out.println("来自服务端的消息:"+strFromServer);
		} catch (SocketException e) {
			e.printStackTrace();
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}

  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值