Debian系統網絡接口配置(Java運行的基礎)
ip addr show
或ifconfig
命令確認系統網絡接口名稱(如eth0、ens33等),這是后續配置的目標。/etc/network/interfaces
文件配置靜態或動態IP。靜態IP示例如下(需替換為實際值):auto eth0
iface eth0 inet static
address 192.168.1.100 # 靜態IP地址
netmask 255.255.255.0 # 子網掩碼
gateway 192.168.1.1 # 默認網關
dns-nameservers 8.8.8.8 8.8.4.4 # DNS服務器(可選,也可單獨配/etc/resolv.conf)
動態IP(DHCP)則簡化為:auto eth0
iface eth0 inet dhcp
保存后退出編輯器。nmcli
配置(適用于桌面環境)。例如修改接口“ens33”的靜態IP:sudo nmcli con mod "ens33" ipv4.addresses 192.168.125.137/24
sudo nmcli con mod "ens33" ipv4.gateway 192.168.125.2
sudo nmcli con mod "ens33" ipv4.dns "8.8.8.8 8.8.4.4"
sudo nmcli con mod "ens33" ipv4.method manual
sudo nmcli con up "ens33" # 重啟連接使配置生效
/etc/netplan/*.yaml
),示例如下:network:
version: 2
renderer: networkd
ethernets:
ens33:
dhcp4: no
addresses: [192.168.125.134/24]
gateway4: 192.168.125.2
nameservers:
addresses: [8.8.8.8, 8.8.4.4]
應用配置:sudo netplan apply
。sudo systemctl restart networking # 傳統方式
或(若使用NetworkManager):sudo systemctl restart NetworkManager
ping
命令測試網絡連通性(如ping www.google.com
),確保能訪問外部網絡。Java應用程序網絡配置(適配系統網絡)
java.net
包實現網絡通信,以下是TCP/UDP連接的簡單示例:
import java.io.*;
import java.net.*;
public class TCPConnection {
public static void main(String[] args) {
try (Socket socket = new Socket("example.com", 80); // 目標主機和端口
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()))) {
out.println("GET / HTTP/1.1"); // HTTP請求頭
out.println("Host: example.com");
out.println();
String inputLine;
while ((inputLine = in.readLine()) != null) { // 讀取響應
System.out.println(inputLine);
}
} catch (IOException e) {
e.printStackTrace(); // 處理連接異常
}
}
}
import java.io.*;
import java.net.*;
public class UDPClient {
public static void main(String[] args) throws IOException {
try (DatagramSocket socket = new DatagramSocket()) { // 創建UDP套接字
InetAddress address = InetAddress.getByName("example.com");
byte[] sendData = "Hello Server".getBytes(); // 發送數據
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, address, 12345);
socket.send(sendPacket); // 發送數據包
byte[] receiveBuffer = new byte[1024];
DatagramPacket receivePacket = new DatagramPacket(receiveBuffer, receiveBuffer.length);
socket.receive(receivePacket); // 接收響應
System.out.println(new String(receivePacket.getData(), 0, receivePacket.getLength())); // 打印響應
}
}
}
setSoTimeout
方法設置(單位:毫秒)。Socket socket = new Socket();
socket.connect(new InetSocketAddress("example.com", 80), 5000); // 連接超時5秒
socket.setSoTimeout(3000); // 讀取超時3秒
java -Dhttp.proxyHost=proxy.example.com -Dhttp.proxyPort=8080 -Dhttps.proxyHost=proxy.example.com -Dhttps.proxyPort=8080 YourApp
networkaddress.cache.ttl
參數設置(單位:秒):java.security.Security.setProperty("networkaddress.cache.ttl", "60"); // 緩存1分鐘
常見問題排查
ip addr
確認接口狀態,ping
測試連通性;若為防火墻問題,可臨時關閉防火墻(sudo ufw disable
)或放行對應端口(sudo ufw allow 8080/tcp
)。/etc/resolv.conf
文件是否包含有效的DNS服務器地址(如nameserver 8.8.8.8
),若修改后未生效,可重啟網絡服務或系統。setcap
命令賦予應用權限:sudo setcap 'cap_net_bind_service=+ep' /path/to/your/java/app