Java应用程序依赖系统网络接口实现通信,因此需先配置Debian系统的网络接口,确保系统能正常联网。
使用以下命令查看系统中的网络接口名称(如eth0、ens160等):
ip addr show
# 或(适用于较旧版本Debian)
ifconfig
编辑网络配置文件/etc/network/interfaces(适用于传统网络管理方式):
sudo nano /etc/network/interfaces
添加以下内容(根据实际情况替换接口名、IP地址、子网掩码、网关和DNS):
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服务器
若使用netplan(Debian 10及以上版本推荐),编辑/etc/netplan/01-netcfg.yaml:
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: no # 关闭DHCP
addresses: [192.168.1.100/24] # IP地址及子网掩码
gateway4: 192.168.1.1 # 默认网关
nameservers:
addresses: [8.8.8.8, 8.8.4.4] # DNS服务器
应用netplan配置:
sudo netplan apply
编辑/etc/network/interfaces:
auto eth0
iface eth0 inet dhcp # 自动获取IP地址
重启网络服务使配置生效:
sudo systemctl restart networking
# 或(较旧版本)
sudo /etc/init.d/networking restart
使用ping命令测试网络是否正常:
ping www.google.com
若能收到回复,说明网络配置成功。
系统网络配置完成后,需在Java代码中指定网络参数(如端口、服务器地址),或调整JVM网络设置。
以下代码演示Java建立TCP连接(客户端向服务器发送HTTP请求):
import java.io.*;
import java.net.*;
public class TCPConnection {
public static void main(String[] args) {
try (Socket socket = new Socket("example.com", 80); // 连接example.com的80端口
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()))) {
// 发送HTTP GET请求
out.println("GET / HTTP/1.1");
out.println("Host: example.com");
out.println();
// 读取响应
String inputLine;
while ((inputLine = in.readLine()) != null) {
System.out.println(inputLine);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
以下代码演示Java建立UDP连接(发送并接收数据包):
import java.io.*;
import java.net.*;
public class UDPClient {
public static void main(String[] args) {
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("Received: " + new String(receivePacket.getData(), 0, receivePacket.getLength()));
} catch (IOException e) {
e.printStackTrace();
}
}
}
通过JVM启动参数调整网络行为,常见参数包括:
java -Dsun.net.inetaddr.ttl=60 -jar your_app.jar # 缓存60秒
java -Dsun.net.maxDatagramSockets=1024 -jar your_app.jar # 增加UDP套接字数量
java -Djavax.net.ssl.trustStore=/path/to/truststore.jks -jar your_app.jar
ufw)是否放行对应端口:sudo ufw allow 8080/tcp # 允许8080端口TCP连接
sudo ufw enable # 启用防火墙