java - ServerSocket 限制连接数

标签 java sockets tcp serversocket

我是网络方面的新手,我正在尝试制作一个用于聊天的小型 java 应用程序。 我想要的是 ServerSocket 接受一个且仅一个连接。如果第二个 Socket 尝试连接到 ServerSocket 它将抛出异常,以便启动套接字的用户知道他无法连接到该 ServerSocket 我查看了 javadoc,找到了该构造函数。

public ServerSocket(int port, int backlog) throws IOException

创建服务器套接字并将其绑定(bind)到指定的本地端口号,并具有指定的积压。端口号 0 表示端口号是自动分配的,通​​常是从临时端口范围中分配的。然后可以通过调用 getLocalPort 来检索此端口号。

我尝试过这个

class Service implements Runnable {
    private Socket maChaussette;

    Service(Socket s) {
        maChaussette = s;
    }

    public void run() {
        System.out.println("connection established");
        while (true) {
            System.out.print("");
        }
        //maChaussette.close();
    }
}

服务器:

class Serv {
    public static void main(String[] a) throws IOException {
        ServerSocket socketAttente;
        socketAttente = new ServerSocket(11111, 1);
        boolean conn = false;
        Thread t;
        while (true) {
            Socket s = socketAttente.accept();
            t = new Thread(new Service(s));
            t.start();
        }
        //socketAttente.close();
    }
}

客户端

public class Cll {
    public static final int PORT = 11111;

    public static void main(String[] arguments) {
        try {
            Socket service = new Socket("localhost", PORT);
            while (true) {
                System.out.print("");
            }
        } catch (Exception e) {
            System.err.println("Error");
            e.printStackTrace();
            System.exit(1);
        }
    }
}

我并没有尝试进行通信或其他什么,我只是创建这些类来尝试阻止与 ServerSocket 的连接数量。

但是使用该代码,如果我运行两个 Cll 程序,我会收到两次“连接已建立”消息。

有人知道如何继续限制 ServerSocket 上的连接吗?

最佳答案

接受一个连接后只需关闭 ServerSocket 即可。并摆脱接受循环周围的“while (true)”。

关于java - ServerSocket 限制连接数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23418621/

相关文章:

java - 在 iText 中使用 PdfGraphics2D 绘图时使用什么单位

javascript - IE HTTPS 问题

c++ - 套接字编程数据服务器

python - 使用 Python 将 TCP 数据流式传输到客户端

Java TCP 服务器在客户端断开连接之前不接收数据包

java - 不同对象、不同线程上的同步方法

java - 文件排序和插入排序。线程中的异常 "main"java.lang.ArrayIndexOutOfBoundsException : 0

java - 更新 com.sun.rowset.CachedRowSetImpl

windows - IPv6 链路本地地址格式

java - 为什么通过套接字传输数据后,文件中的数据丢失了?