在 Java 中“监听网络端口”通常有两种常见场景,对应不同的 API:
使用 ServerSocket(最常用、最基础)
import java.io.*;
import java.net.*;
public class TcpServer {
public static void main(String[] args) throws IOException {
int port = 8080;
try (ServerSocket serverSocket = new ServerSocket(port)) {
System.out.println("监听端口:" + port);
while (true) {
Socket socket = serverSocket.accept(); // 阻塞等待连接
System.out.println("客户端连接:" + socket.getRemoteSocketAddress());
// 简单读取数据
BufferedReader in = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
String msg = in.readLine();
System.out.println("收到:" + msg);
socket.close();
}
}
}
}
✅ 特点:
accept())accept() 得到一个客户端连接使用 DatagramSocket
import java.net.*;
public class UdpServer {
public static void main(String[] args) throws Exception {
int port = 9999;
DatagramSocket socket = new DatagramSocket(port);
byte[] buf = new byte[1024];
System.out.println("监听 UDP 端口:" + port);
while (true) {
DatagramPacket packet = new DatagramPacket(buf, buf.length);
socket.receive(packet); // 阻塞接收
String msg = new String(packet.getData(), 0, packet.getLength());
System.out.println("收到:" + msg);
}
}
}
✅ 特点:
使用 java.nio.channels
ServerSocketChannel channel = ServerSocketChannel.open();
channel.bind(new InetSocketAddress(8080));
channel.configureBlocking(false);
Selector selector = Selector.open();
channel.register(selector, SelectionKey.OP_ACCEPT);
while (true) {
selector.select();
// 处理事件
}
✅ 适合:
java.net.BindException: Address already in use
Socket, ServerSocket⚠️ Java 标准库 不能 直接监听网卡流量
需要:
pcap4j如果你能说明:
我可以给你更精确的代码。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。