Problemas com alocação de porta via ServerSocket no Linux

3 respostas
andre_a_s

Senhores :)
Meu conhecimento de linux não mto profundo...
Tenho uma classe servidor e uma classe cliente, onde a servidor cria um ServerSocket na porta 8000 e fica esperando por chamadas.
Meu cliente apenas acessa essa porta no servidor e executa.

Classe servidor:
public class Server {

	public static void main(String[] args) {

		try {
			ServerSocket ss = new ServerSocket(8000);

			while (true) {
				System.out.println("\nServidor esperando requisição...");
				Socket socket = ss.accept();
				ObjectInputStream objectInputStream = new ObjectInputStream(socket.getInputStream());				
				Task task = (Task)objectInputStream.readObject();

				Principal principal = new Principal();
				principal.executeRobot();				
				
				task.setValue(socket.getInetAddress().toString());
				
				ObjectOutputStream objectOutputStream = new ObjectOutputStream(socket.getOutputStream());
				objectOutputStream.writeObject(task);
				objectOutputStream.close();

				objectInputStream.close();
				socket.close();

			}

		} catch (Exception e) {
			e.printStackTrace();
		}

	}
	
	
}
Classe cliente:
public class Client {

	private static final int PORTA_SERVIDOR = 8000;

	public static void main(String[] args) {
		
		try {
			ArrayList<String> ips = new ArrayList<String>();
			ips.add("192.168.99.164");
			//ips.add("192.168.99.150");
			
			Thread.sleep(2000);
				
			for (String ip : ips) {
				AccessServer accessServer = new AccessServer(ip, PORTA_SERVIDOR);
				Thread t = new Thread(accessServer);
				t.start();
			}
				

		} catch (Exception e) {
			System.out.println(e);
			e.printStackTrace();
		}

	}

}
Quando meu cliente está em um windows, e o server em outro windows, td ocorre ok, porém, se o server estiver no linux recebo a seguinte exception:
Connection refused: connect
ACHO que isso deve ser pq o linux não alocou a porta 8000, não tenho certeza. No caso do servidor, ele é apenas um jar, onde executo:
java -jar Server.jar
Tanto no windows quanto no linux.

Pelo windows, consigo pingar o ip do linux, então acesso ele tem, tlvz a porta q nao esteja realmente liberada.

Alguem tem uma luz?

3 Respostas

andre_a_s

Opa… resolvido.
Acho q a porta 8000 é desabilitada pelo linux.
Coloquei porta 999 e rolou :wink:

T

Use o seguinte comando para ver que portas estão ocupadas:

netstat -an | grep tcp | grep LISTEN

Exemplo:

tcp        0      0 0.0.0.0:523             0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:6000            0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:50001           0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN
tcp        0      0 :::9443                 :::*                    LISTEN
tcp        0      0 :::9060                 :::*                    LISTEN
tcp        0      0 :::9100                 :::*                    LISTEN
tcp        0      0 :::8880                 :::*                    LISTEN
tcp        0      0 :::9043                 :::*                    LISTEN
tcp        0      0 :::22                   :::*                    LISTEN
tcp        0      0 :::9080                 :::*                    LISTEN
tcp        0      0 :::2809                 :::*                    LISTEN

Nesta máquina, como você pode ver, as portas ocupadas são: 523, 111, 6000, 50001, 25, 443, 9060, 9100, 8880, 9043, 22, 9080, 2809

Nunca lembro direito se um usuário não-root pode abrir sockets em portas acima de 1024 ou 5000 - qual é o número mágico mesmo?

andre_a_s

Thingol, acho q deve ser abaixo de 1024, pois com 999 funcionou :wink:

Criado 29 de março de 2007
Ultima resposta 29 de mar. de 2007
Respostas 3
Participantes 2