[RESOLVIDO]Problema com sockets (receber o que eles enviam)

Galera, estou com um probleminha, estou criando um chat e para isso estou usando sockets, porém tem um problema, não estou conseguindo receber o que é enviado
Por exemplo, tenho o seguinte trecho:

[code]
public void enviarMensagem(int nCodigo,String sTrama){
try{
DataOutputStream dos=new DataOutputStream(s.getOutputStream());
dos.writeInt(nCodigo);
dos.writeUTF(sTrama);
System.out.println(“passou1”);

    }catch(Exception e){
        JOptionPane.showMessageDialog(null, "Nao se pode enviar a mensagem");
    }
    
}[/code]

e no meu run eu tenho:

[code] public void run(){
//System.out.println(“a”);

    try{
        DataInputStream dis=new DataInputStream(s.getInputStream());
        while(true){
        int nCodigo=dis.readInt();
        String sTrama=dos.toString();
        ventana.alterar(sTrama);
        }
        
    }catch(Exception e){
    }
    
}[/code]

O programa trava quando eu boto o nCodigo para receber o dis.readInt(), alguma dica? Lembrando que esse ‘s’ é meu socket que recebe o ipl loopback e uma porta qualquer

A dica é que os comandos de leitura de stream’s bloqueiam a thread atual até receber dados. Ou seja, o seu DataInputStream trava no readInt porque não tem nenhum int para ele receber. Daí, você tem que pensar no óbvio:

1 - você levantou o “outro lado” da comunicação ?
2 - o “outro lado” da comunicação está enviando dados ?

Vc está fazendo esse chat para estudo ou profissionalmente ?

rmendes obrigado pela ajuda
Mas quando eu coloco dos.writeInt(nCodigo), ao ler dis.readInt() não era para me retornar o valor nCodigo?

Flavio, é profissionalmente mesmo =)

Abraços

[quote=LucasPokemon]rmendes obrigado pela ajuda
Mas quando eu coloco dos.writeInt(nCodigo), ao ler dis.readInt() não era para me retornar o valor nCodigo?

Flavio, é profissionalmente mesmo =)

Abraços[/quote]

aí é que está a questão … por um acaso, ao falar no telefone, a sua voz saiu no seu próprio telefone ou no telefone de quem você está ligando ? você está com um cliente e um servidor levantados ? como os clientes se conectam ?

No começo eu rodo um servidor que abre a porta 7878, ai depois eu crio esse socket s que vai na porta 7878 e uso meu iploopback
Não entendo o que pode estar dando errado, até porque eu me guiei por um exemplo de chat que deu certo

vlw pela atençao

[quote=LucasPokemon]No começo eu rodo um servidor que abre a porta 7878, ai depois eu crio esse socket s que vai na porta 7878 e uso meu iploopback
Não entendo o que pode estar dando errado, até porque eu me guiei por um exemplo de chat que deu certo

vlw pela atençao[/quote]

Pra quê você usa o ip loopback ?

Por que quando eu abro o socket,eu abro na minha maquina certo? Ai eu uso o ip loopback que eu sei que a porta no casso 7878 vai estar aberta nele

Estou correto?

[quote=LucasPokemon]Por que quando eu abro o socket,eu abro na minha maquina certo? Ai eu uso o ip loopback que eu sei que a porta no casso 7878 vai estar aberta nele

Estou correto?[/quote]

afff … tá certo, viajei aqui.

Mas deixa eu ver se entendi, você diz que levanta um socket server na porta 7878. Daí você conecta o seu cliente nesse server socket, escreve dados através do socket cliente e o servidor não recebe, é esse o seu problema ?

Bem, na realidade meu problema não chega a ser isso,posso estar errando apenas em definição.
Quando eu crio o:
DataOutputStream dos=new DataOutputStream(s.getOutputStream());
dos.writeInt(nCodigo);

O que que isso faz?

DataInputStream dis=new DataInputStream(s.getInputStream());
int nCodigo=dis.readInt();

e isso?

Esse dis não era pra receber o que foi colocado no dos?

Bem, na realidade meu problema não chega a ser isso,posso estar errando apenas em definição.
Quando eu crio o:
DataOutputStream dos=new DataOutputStream(s.getOutputStream());
dos.writeInt(nCodigo);

O que que isso faz?

DataInputStream dis=new DataInputStream(s.getInputStream());
int nCodigo=dis.readInt();

e isso? Quando eu faço o dis.readInt() o que era pra ser executado?

Esse dis não era pra receber o que foi colocado no dos?

doublepost malz =x

Cara, acho que você não está entendendo o seguinte. O chat é uma aplicação que tem ser feita em duas partes, cliente e servidor. Em ambos os lados você precisa abrir sockets de entrada e saída … É por isso que eu citei o exemplo do telefone. Quando você fala no telefone, a sua voz sai do outro lado da linha, e quando alguém fala do outro lado, você escuta a voz da pessoa. É a mesma coisa com sockets. Uma comunicação de sockets precisa de uma lado servidor e um lado cliente. Quando você abre uma comunicação entre os sockets os dados que você escreve no socket cliente são recebidos pelo socket servidor. O cliente por sua vez recebe apenas os dados que foram escritos pelo servidor. A minha sugestão é que você comece com um exemplo mais simples ainda. Para você entender como os sockets funcionam, pois além disso, você vai precisar fazer a coisa multi-thread para funcionar de verdade.

É porque eu peguei isso de um exemplo,e no exemplo dava certo.
Bem,quando eu faço
DataOutputStream dos=new DataOutputStream(s.getOutputStream());
dos.writeInt(nCodigo);

o que isso faz?

e no:
DataInputStream dis=new DataInputStream(s.getInputStream());
int nCodigo=dis.readInt();

esse dis.readInt() me retorna o que?

Se puder tirar essas duvidas agradeceria mto
abraços e vlw pela atençao

Cara, fiz o exemplo mais simples possível, perceba que são dois programas, um servidor e um cliente. Nesse exemplo, o servidor apenas recebe mensagens do cliente, e o cliente apenas envia

public class ServerExample {
	public static void main(String[] args) {
		try {
			ServerSocket serverSocket = new ServerSocket(5555);
			
			System.out.println("server [5555]: aguardando conexão");
			
			Socket socket = serverSocket.accept();
			
			System.out.println("conexão aceita ...");
			
			InputStreamReader in = new InputStreamReader(socket.getInputStream());
			BufferedReader reader = new BufferedReader(in);
			
			while(true){
				String mensagemEnviadaPeloCliente = reader.readLine();
				System.out.println(mensagemEnviadaPeloCliente);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}
public class ClientExample {
	public static void main(String[] args) {
		try {
			Socket socket = new Socket("127.0.0.1", 5555);

			InputStreamReader in = new InputStreamReader(System.in);
			BufferedReader reader = new BufferedReader(in);
			PrintStream ps = new PrintStream(socket.getOutputStream());
			

			while (true) {
				System.out.println("Pronto para enviar mensagem:");
				String mensagemParaEnviar = reader.readLine();
				ps.println(mensagemParaEnviar);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

rmendes vlw pela ajuda ai cara, de verdade
chegar em ksa eu tento ajeita
abraços

Já pensou em usar JMS ?

O seu servidor está enviando as mensagens de volta para os clientes?

Consegui galera, valeu pela ajuda =D
Acho que o meu erro era que só o cliente criava conexão, porém o socket que aceitava a solicitação da porta abrir não possuia nada que o lia, ai só havia troca por uma das partes

A solução foi toda vez que eu abria uma porta, adicionava ela em uma arraylist e criava metodos para ler (dis e dos)

Abraços