温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java如何监听网络端口

发布时间:2026-09-13 01:49:36 来源:亿速云 阅读:97 作者:小樊 栏目:编程语言

在 Java 中“监听网络端口”通常指作为服务端,接收客户端的 TCP 连接(对应 ServerSocket),或者接收 UDP 数据包(对应 DatagramSocket)。下面按常见场景说明。


一、TCP 端口监听(最常用)

1️⃣ 使用 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();
        }
    }
}

✅ 特点

  • 阻塞式监听
  • 适合入门、简单服务

2️⃣ 使用 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);
                }
            }
        }
    }
}

✅ 特点

  • 单线程处理大量连接
  • 高性能网络框架基础(Netty)

二、UDP 端口监听

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);
        }
    }
}

✅ 适用于

  • 即时通信
  • 日志收集
  • 心跳包

三、WebSocket / HTTP 端口监听(应用层)

如果你说的“监听端口”是指 Web 服务:

  • Spring Boot
@SpringBootApplication
public class App {
    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }
}

默认监听 8080

  • Netty
ServerBootstrap bootstrap = new ServerBootstrap();

四、注意事项

✅ 端口范围:1024~65535(避免系统端口)
✅ 防火墙 / 云安全组需放行
✅ 生产环境避免一个连接一个线程
✅ IPv6 / 0.0.0.0 绑定区别


五、你可以告诉我

为了给你更合适的方案,我需要确认:

  1. TCP 还是 UDP?
  2. 简单学习还是生产级服务?
  3. 是否需要高并发?
  4. 是否使用 Spring / Netty?

我可以直接给你可运行示例或架构建议。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI