Java实现UDP通信
环境
CentOS Linux release 8.1.1911 (Core)
java version "14.0.2" 2020-07-14
代码
服务器端的Server程序需先于客户端的Client程序运行
Client
其中,<host name>
为服务器端IP地址,<port>
为服务器程序监听的端口号
import java.net.*;
import java.io.*;
import java.util.Scanner;
public class UDPClient {
private String hostName;
private int port;
private DatagramSocket datagramSocket;
public UDPClient(String hostName, int port) {
this.hostName = hostName;
this.port = port;
try {
datagramSocket = new DatagramSocket();
} catch (SocketException e) {
e.printStackTrace();
}
}
public void sendMessage(String message) {
byte[] buffer = message.getBytes();
try {
DatagramPacket datagramPacket = new DatagramPacket(buffer, buffer.length, InetAddress.getByName(hostName), port);
datagramSocket.send(datagramPacket);
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
final String HOST_NAME = "<host name>";
final int PORT = <port>;
UDPClient udpClient = new UDPClient(HOST_NAME, PORT);
String message = "";
while (!message.equals("exit")) {
Scanner scanner = new Scanner(System.in);
message = scanner.nextLine();
udpClient.sendMessage(message);
}
}
}
Server
其中,<port>
为程序监听的端口号,需与客户端设置的一致
import java.net.*;
import java.io.*;
public class UDPServer {
private int port;
private DatagramSocket datagramSocket;
public UDPServer(int port) {
this.port = port;
try {
datagramSocket = new DatagramSocket(port);
} catch (SocketException e) {
e.printStackTrace();
}
}
public String receive() {
byte[] buffer = new byte[1024];
DatagramPacket datagramPacket = new DatagramPacket(buffer, buffer.length);
try {
datagramSocket.receive(datagramPacket);
} catch (IOException e) {
e.printStackTrace();
}
String message = new String(datagramPacket.getData(), 0, datagramPacket.getLength());
return message;
}
public static void main(String[] args) throws Exception
{
String message = "";
UDPServer udpServer = new UDPServer(<port>);
while (!message.equals("exit")) {
message = udpServer.receive();
System.out.println(message);
}
}
}
云服务器安全组配置
安全组访问规则入方向协议类型需设置为UDP
测试结果
Client
Hello
This is Client!
exit
Server
Hello
This is Client!
exit
最后
- 由于博主水平有限,不免有疏漏之处,欢迎读者随时批评指正,以免造成不必要的误解!