Socket

7 respostas
D

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?

7 Respostas

dreamspeaker

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

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

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

P
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
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();	
	}
}
P
acho que vc deve estar utilizando o Socket ; o correto é utilizar o ServerSocket e especificar o numero da porta ex.
s =   new ServerSocket(6000) ; 
Socket socket = s.accept();
 DataInputStream inputStream = new     DataInputStream(socket.getInputStream());
String  data = inputStream.readUTF
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
Criado 23 de julho de 2007
Ultima resposta 23 de jul. de 2007
Respostas 7
Participantes 6