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