在 Java 中“监听网络端口”通常指作为服务端,接收客户端的 TCP 连接(对应 ServerSocket),或者接收 UDP 数据包(对应 DatagramSocket)。下面按常见场景说明。
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());
// 处理客户端
new Thread(() -> handle(socket)).start();
}
}
}
private static void handle(Socket socket) {
try (
BufferedReader in = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream(), true)
) {
String msg = in.readLine();
System.out.println("收到: " + msg);
out.println("服务器已收到");
} catch (IOException e) {
e.printStackTrace();
}
}
}
✅ 特点
NIO(高并发,非阻塞)import java.nio.channels.*;
import java.net.InetSocketAddress;
public class NioServer {
public static void main(String[] args) throws Exception {
Selector selector = Selector.open();
ServerSocketChannel server = ServerSocketChannel.open();
server.bind(new InetSocketAddress(8080));
server.configureBlocking(false);
server.register(selector, SelectionKey.OP_ACCEPT);
while (true) {
selector.select();
for (SelectionKey key : selector.selectedKeys()) {
if (key.isAcceptable()) {
SocketChannel client = server.accept();
client.configureBlocking(false);
client.register(selector, SelectionKey.OP_READ);
}
}
}
}
}
✅ 特点
import java.net.*;
public class UdpServer {
public public static void main(String[] args) throws Exception {
DatagramSocket socket = new DatagramSocket(9090);
byte[] buf = new byte[1024];
while (true) {
DatagramPacket packet = new DatagramPacket(buf, buf.length);
socket.receive(packet); // 阻塞
String msg = new String(packet.getData(), 0, packet.getLength());
System.out.println("UDP收到: " + msg);
}
}
}
✅ 适用于
如果你说的“监听端口”是指 Web 服务:
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
默认监听 8080
ServerBootstrap bootstrap = new ServerBootstrap();
✅ 端口范围:1024~65535(避免系统端口)
✅ 防火墙 / 云安全组需放行
✅ 生产环境避免一个连接一个线程
✅ IPv6 / 0.0.0.0 绑定区别
为了给你更合适的方案,我需要确认:
我可以直接给你可运行示例或架构建议。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。