查看自己的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) {// 目標服務器IPString 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()) { // 接收到連接后自動關閉clientSocketInetSocketAddress 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());}}
}
運行
先啟動服務器端,再啟動客戶端