一,在服务端
1.创建Socket,监听自己设置的端口号(我用6666)
2.在客户端发送信息时,创建一个DatagramSocket对象来接收并读取客户端的”数据包“
3.在匹配到问题时进行回复,反馈信息给客户
代码如下:
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
import java.nio.charset.StandardCharsets;
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,StandardCharsets.UTF_8).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();
}
}
}
二,客户端
1.指定连接主机的端口
2.创建数据包
3.发送数据包
4.接收来自服务器端的数据包
代码如下:
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) {
try(DatagramSocket clientSocket =new DatagramSocket()){
//连接指定主机的端口
clientSocket.connect(InetAddress.getByName("192.168.199.149"),6666);
//创建数据包
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();
}
}
}