我有一个服务器,它应该打开ServerSocket
与每个客户端的连接。问题是,我需要客户端检查 ConnectionPort 是否已在使用中。这意味着客户端应该检查端口 12345 并得到一个结果,如果有ServerSocket
“等待”或没有,如果没有,他们会采取下一个等。
所以最终有两三个客户端连接到服务器上的端口 12345、12346、12347...
我写了这个:
serverSocket = new ServerSocket(incomingPort, 1); // backlog 1 = Minimum
incomingSocket = serverSocket.accept();
readerIn = new BufferedReader(new InputStreamReader(incomingSocket.getInputStream()));
outgoingSocket = new Socket(incomingSocket.getInetAddress().getHostAddress(), outgoingPort);
dataOutputStream = new BufferedOutputStream(outgoingSocket.getOutputStream());
pwOut = new OutputStreamWriter(outgoingSocket.getOutputStream());
我连接了第一个客户端并打开(在最后三行中)另一个“返回”到客户端的连接。在客户端,我写的几乎一样,反之亦然:
outgoingSocket = new Socket(serverIP, inPort1);
dataOutputStream = new BufferedOutputStream(outgoingSocket.getOutputStream());
pwOut = new OutputStreamWriter(outgoingSocket.getOutputStream());
serverSocket = new ServerSocket(outPort1);
incomingSocket = serverSocket.accept();
readerIn = new BufferedReader(new InputStreamReader(incomingSocket.getInputStream()));
下一个尝试打开连接的客户端也在做同样的事情,从同一个端口开始。我希望得到一个Exception
像一个ConnectException
或这样的,但没有。我想这与积压的“缓冲区”有关。它继续一切并等待成为a ServerSocket
,但它会永远等待。服务器本身已经被第一个连接占用。
我读了很多帖子,但他们都说这outgoingSocket.isConnected()
是给予true
和.isClosed()
给予false
,至少在超时之前是这样。有没有办法确定服务器已经被占用?或者至少要“禁用”积压,以便拒绝所有传入连接?