Socket

alguem sabe me informar se qdo eu abro um socket e mantenho ele aberto na hora de responder ele vai responder na mesma porta ou vai em porta diferente?

eu debuguei minha aplicação e ele abre a conexão na porta 6003 só q na hora de responder, está indo pra outra porta qlqr aleatória!

alguém sabe me informar se isso é possível?

Que eu saiba, se está aberto numa porta, a comunicação toda é feita por ela.

Tem certeza que nenhuma das duas pontas encerrou a conexão?

A sua aplicação funciona como cliente ou como servidor?

Tano cliente quanto servidor, uma vez estabelecida a conexão, as portas serão as mesmas até o final.

Pelo que entedi a sua aplicação é o cliente de alguma aplicação servidora.

Neste caso, provavelmente, a aplicação servidora está esperando conexões na porta 6003, mas quando um cliente se conecta uma thread é lançada para atender a requisição em uma outra porta.

Com isso a aplicação servidora sempre está disponível para os usuários e consegue atender mais de um usuário simultaneamente.

Você disse bem, uma vez estabelecida. Se a aplicação dele funcionar como um servidor, e tudo indica que sim, sua dúvida deve estar surgindo da maneira como os servidores trabalham.

Basicamente um servidor funciona da seguinte maneira. Um socket servidor é aberto e vinculado a uma porta para que os clientes possam fazer pedidos de conexão. Uma vez aberta a conexão, é criado um novo socket no lado do servidor para que este possa se comunicar com o cliente e vice-versa, e a este novo socket é vinculado uma outra porta.

Este deve ser o motivo da dúvida do davidpadilha. Ele tem consiência que o seu aplicativo espera receber conexões na porta 6003, contudo, quando ele manda imprimir o valor das portas vinculadas aos sockets que ele esta utilizando para responder aos clientes, ocorre a discrepancia nos números das portas.

Existe um bom tutorial sobre o assunto, veja:

http://www.sumersoft.com/publicacoes/SocketsEmJAVA.pdf

eu nao entendi muito o enunciado da sua pergunta , mas porem que eu saiba a comunicação é feita na mesma porta , mas ja aconteceu nos meus testes de eu configurar a porta 6000 e quando dou um get ele recuperar a informação como porta 6001 , mas eu tenho um exemplo aqui que talvez pode te ajudar

[code]package com.projeto.listener;

import java.io.DataInputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class TcpListener {

 private ServerSocket s;

public TcpListener() throws IOException{
	
	System.out.println("Conectando.......");
	s = new ServerSocket(8001);
	Socket socket = s.accept();

	//cria um canal para  receber os  dados :
	DataInputStream inputStream = new DataInputStream(socket.getInputStream());

	String hello = inputStream.readUTF();
	System.out.println("String recebida = " +hello );
	//FECHAMENTO DOS  FLUXOS 
	inputStream.close();

	//FECHAMENTO DO SOCKET
	s.close();
	ShowListenerResults showResults = new ShowListenerResults(hello);
	showResults.show();	
}

}
[/code]

acho que vc deve estar utilizando o Socket ; o correto é utilizar o ServerSocket e especificar o numero da porta ex. [code]s = new ServerSocket(6000) ;
Socket socket = s.accept();
DataInputStream inputStream = new DataInputStream(socket.getInputStream());
String data = inputStream.readUTF

[/code]
com essas 3 linhas ja se pode ler a indormação ; nota - se que , existe DataInputStream e InputStream , cada uma com suas particularidades , mas no final , todos os caminhos levam a Roma