我是网络方面的新手,我正在尝试制作一个用于聊天的小型 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/