查看自己的IP地址
以管理员身份运行cmd
输入
ipconfig
复制图中的IPv4地址
UDP通信程序
UdpReceiver.java
import java.net.*;
public class UdpReceiver {
public static void main(String[] args) {
// 监听端口(需与发送端保持一致)
int listenPort = 8888;
// 接收数据的缓冲区大小(这里设置为1024字节)
byte[] receiveBuffer = new byte[1024];
try (DatagramSocket socket = new DatagramSocket(listenPort)) {
System.out.println("接收端已启动,正在监听端口 " + listenPort + " ...");
// 创建用于接收数据的空数据报包
DatagramPacket packet = new DatagramPacket(
receiveBuffer,
receiveBuffer.length
);
// 阻塞等待接收数据(程序会在此处暂停,直到收到数据)
socket.receive(packet);
// 解析接收到的数据
String receivedMessage = new String(
packet.getData(),
0,
packet.getLength() // 只取有效数据部分(避免缓冲区残留数据干扰)
);
// 打印发送方信息和接收内容
System.out.println("收到来自 " + packet.getAddress().getHostAddress()
+ ":" + packet.getPort() + " 的消息:" + receivedMessage);
} catch (SocketException e) {
System.err.println("Socket创建失败(可能端口被占用):" + e.getMessage());
} catch (Exception e) {
System.err.println("接收过程中发生异常:" + e.getMessage());
}
}
}
UdpSender.java
import java.net.*;
public class UdpSender {
public static void main(String[] args) {
// 目标IP地址
String targetIp = "172.18.92.212";
// 目标端口(需与接收端保持一致)
int targetPort = 8888;
// 要发送的数据
String message = "这是来自UDP发送端的测试消息!";
try (DatagramSocket socket = new DatagramSocket()) {
// 将字符串转换为字节数组
byte[] sendData = message.getBytes();
// 创建数据报包:指定目标地址、端口和要发送的数据
DatagramPacket packet = new DatagramPacket(
sendData,
sendData.length,
InetAddress.getByName(targetIp),
targetPort
);
// 发送数据报
socket.send(packet);
System.out.println("发送成功!发送内容:" + message);
} catch (SocketException e) {
System.err.println("Socket创建失败:" + e.getMessage());
} catch (UnknownHostException e) {
System.err.println("目标IP地址解析失败:" + e.getMessage());
} catch (Exception e) {
System.err.println("发送过程中发生异常:" + e.getMessage());
}
}
}
运行
先启动接收端,再启动发送端
TCP通信程序
TcpClient.java
import java.io.*;
import java.net.*;
public class TcpClient {
public static void main(String[] args) {
// 目标服务器IP
String serverIp = "172.18.92.212";
// 目标服务器端口(需与服务器端保持一致)
int serverPort = 9999;
// 要发送的数据
String message = "这是来自TCP客户端的测试消息!";
try (Socket socket = new Socket(serverIp, serverPort);
OutputStream os = socket.getOutputStream();
PrintWriter pw = new PrintWriter(os, true)) { // 自动刷新缓冲区
// 发送数据
pw.println(message);
System.out.println("客户端已连接服务器,消息发送成功:" + message);
} catch (UnknownHostException e) {
System.err.println("目标服务器IP解析失败:" + e.getMessage());
} catch (ConnectException e) {
System.err.println("连接失败(可能服务器未启动/端口错误):" + e.getMessage());
} catch (IOException e) {
System.err.println("通信过程中发生异常:" + e.getMessage());
}
}
}
TcpServer.java
import java.io.*;
import java.net.*;
public class TcpServer {
public static void main(String[] args) {
// 监听端口(需与客户端保持一致)
int listenPort = 9999;
try (ServerSocket serverSocket = new ServerSocket(listenPort)) {
System.out.println("服务器已启动,正在监听端口 " + listenPort + " ...");
// 阻塞等待客户端连接(程序会在此处暂停,直到有客户端连接)
try (Socket clientSocket = serverSocket.accept()) { // 接收到连接后自动关闭clientSocket
InetSocketAddress clientAddress = (InetSocketAddress) clientSocket.getRemoteSocketAddress();
System.out.println("客户端连接成功!客户端地址:" + clientAddress.getAddress().getHostAddress()
+ ":" + clientAddress.getPort());
// 获取输入流读取客户端数据
InputStream is = clientSocket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
// 读取一行数据(与客户端的println对应)
String receivedMessage = br.readLine();
System.out.println("收到客户端消息:" + receivedMessage);
} catch (IOException e) {
System.err.println("客户端连接处理异常:" + e.getMessage());
}
} catch (IOException e) {
System.err.println("服务器启动失败(可能端口被占用):" + e.getMessage());
}
}
}
运行
先启动服务器端,再启动客户端