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!
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?
H
Henrique_Mota_Esteve
A sua aplicação funciona como cliente ou como servidor?
Ronaldoviper
Tano cliente quanto servidor, uma vez estabelecida a conexão, as portas serão as mesmas até o final.
rigolin
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.
H
Henrique_Mota_Esteve
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.
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
packagecom.projeto.listener;importjava.io.DataInputStream;importjava.io.IOException;importjava.net.ServerSocket;importjava.net.Socket;publicclassTcpListener{privateServerSockets;publicTcpListener()throwsIOException{System.out.println("Conectando.......");s=newServerSocket(8001);Socketsocket=s.accept();//cria um canal para receber os dados :DataInputStreaminputStream=newDataInputStream(socket.getInputStream());Stringhello=inputStream.readUTF();System.out.println("String recebida = "+hello);//FECHAMENTO DOS FLUXOS inputStream.close();//FECHAMENTO DO SOCKETs.close();ShowListenerResultsshowResults=newShowListenerResults(hello);showResults.show();}}
P
pabloiglesias
acho que vc deve estar utilizando o Socket ; o correto é utilizar o ServerSocket e especificar o numero da porta ex.
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