一个简单的UDP服务器实现,用于监听来自客户端的UDP数据包,并根据接收到的内容发送响应。这段代码展示了如何使用Java的DatagramSocket
和DatagramPacket
类来创建一个简单的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的DatagramSocket
和DatagramPacket
类来创建一个简单的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();
}
}
}