Redirecionando sockets para outras portas

4 respostas
DavidUser

Tenho uma porta padrão no servidor e ao receber uma conexão é preciso redirecionar esse cliente para uma outra porta no servidor para liberar a porta padrão.
Como posso fazer o redirecionamento da maneira mais simples e eficiente?

Atualmente respondo a primeira conexão com o número da porta que desejo redirecionar então abro a porta para a conexão novamente:
Socket serverSocket = dataService.accept();
		OutputStreamWriter out = new OutputStreamWriter(serverSocket.getOutputStream());
		
		out.write(actualyUsablePort);
		ServerSocket usableSocketService = new ServerSocket(actualyUsablePort++);
		Socket usableSocket = usableSocketService.accept();
		if (usableSocket.getInetAddress() != serverSocket.getInetAddress())
			throw new Exception("Unexpected connection");

		serverSocket.close();
		interpretMessage(usableSocket);

4 Respostas

L

Da uma olhada nisso:

https://code.google.com/p/nettool4j/

DavidUser

Estava tentando entender, de fato quando uso ServerSocket ele abre a porta que defini como padrão e ao passar pelo accept ele abre uma nova porta local e cria o socket para ela ja deixando a porta do ServerSocket livre para reutilização?

L

Na verdade do lado servidor será sempre a mesma porta, o cliente que conecta em portas aleatórias.

sergiotaborda

Exactamente. Caso contrário o servidor não poderia processar um novo request e o cliente teria que adivinhar que porta está livre.
Ou seja, o que vc quer, já está embutido no funcionamento do ServerSocket.

Criado 11 de março de 2013
Ultima resposta 12 de mar. de 2013
Respostas 4
Participantes 3