[RESOLVIDO]Problema com sockets (receber o que eles enviam)
17 respostas
L
LucasPokemon
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:
publicvoidenviarMensagem(intnCodigo,StringsTrama){try{DataOutputStreamdos=newDataOutputStream(s.getOutputStream());dos.writeInt(nCodigo);dos.writeUTF(sTrama);System.out.println("passou1");}catch(Exceptione){JOptionPane.showMessageDialog(null,"Nao se pode enviar a mensagem");}}
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 ?
Flavio_machine
Vc está fazendo esse chat para estudo ou profissionalmente ?
L
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
rmendes08
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
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 ?
L
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
rmendes08
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
Pra quê você usa o ip loopback ?
L
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?
rmendes08
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?
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 ?
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
rmendes08
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.
Se puder tirar essas duvidas agradeceria mto
abraços e vlw pela atençao
rmendes08
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
publicclassClientExample{publicstaticvoidmain(String[]args){try{Socketsocket=newSocket("127.0.0.1",5555);InputStreamReaderin=newInputStreamReader(System.in);BufferedReaderreader=newBufferedReader(in);PrintStreamps=newPrintStream(socket.getOutputStream());while(true){System.out.println("Pronto para enviar mensagem:");StringmensagemParaEnviar=reader.readLine();ps.println(mensagemParaEnviar);}}catch(Exceptione){e.printStackTrace();}}}
L
LucasPokemon
rmendes vlw pela ajuda ai cara, de verdade
chegar em ksa eu tento ajeita
abraços
Flavio_machine
Já pensou em usar JMS ?
lucas_guj
O seu servidor está enviando as mensagens de volta para os clientes?
L
LucasPokemon
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)