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