嗨我有这个服务器的代码,我添加了if来检查ocupado(忙)是否= 0,接受套接字,如果它打开busy = 1,所以拒绝直到第一个用户完成连接,但不工作...
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Date;
/**
*
* @author www
*/
public class ServidorTCPBasico {
static int ocupado = 0; // = busy var to check
public static void main(String[] args) {
try {
// Instancia o ServerSocket ouvindo a porta 9000
ServerSocket servidor = new ServerSocket(9000);
System.out.println("Servidor ouvindo a porta 9000");
while(true) {
// o método accept() bloqueia a execução até que
// o servidor receba um pedido de conexão
Socket cliente = servidor.accept();
if(ocupado == 0) {
int ocupado = 1;
System.out.println("Cliente conectado: " + cliente.getInetAddress().getHostAddress());
System.out.println(ocupado);
ObjectOutputStream saida = new ObjectOutputStream(cliente.getOutputStream());
saida.flush();
// saida.writeObject(new Date());
saida.writeUTF("TEXTO TESTE PARA TRANSFERIR...");
saida.close();
// cliente.close();
} else {
System.out.println("Ocupado");
}
}
}
catch(Exception e) {
System.out.println("Erro: " + e.getMessage());
}
finally {
}
}
}
所以我的问题是如何使套接字每次只接受一个连接,当用户在确认框中按OK时,SERVER关闭连接。
确认框等部分..我将添加,我的问题是“逻辑”或命令只允许一个连接,当客户端尝试时,它拒绝连接,我将在稍后处理客户端中的拒绝连接
答案 0 :(得分:0)
根据JavaDocs for ServerSocket,您可以将待办事项设置为第二个参数。如果请求超过此积压,则会被拒绝。按照这一行:
The maximum queue length for incoming connection indications (a request to connect) is set to the backlog parameter. If a connection indication arrives when the queue is full, the connection is refused
所以,您可以尝试以下方法:
ServerSocket servidor = new ServerSocket(9000, 1);
答案 1 :(得分:0)
您已经通过拥有单线程服务器来确保这一点。在完成之前的客户端之前,您无法返回accept()
电话。您根本无需进行occupado
测试。