Receber mensagem a partir de um Socket [Resolvido]
7 respostas
G
gilvanandre
Boa tarde…
Seguinte pessoal, estou aqui quebrando a cabeça para utilizar o Socket no Java.
O problema é maior ainda pois preciso de resposta de um cliente em Delphi… e Eu não consigo ler a resposta da aplicação cliente.
Já procurei por vários fóruns e nada encontrei… se alguém puder me ajudar fico muito grato.
Segue parte do código.
publicTesteServerSocket()throwsIOException{try{serverSocket=newServerSocket(666);System.out.println("Socket Server inicializado.");//Aguarda conexãosocket=serverSocket.accept();System.out.println("client conectado: "+socket.getInetAddress().getHostAddress());in=newBufferedReader(newInputStreamReader(socket.getInputStream()));out=newPrintWriter(socket.getOutputStream(),true);//Envia para o Cliente.out.println("conexão estabelecida");out.flush();Stringtext;while((text=in.readLine())!=null){//Trava... não sei pqSystem.out.println("Mensagem:"+text);}}catch(Exceptionex){System.out.println(ex.getMessage());}}
Segue também a parte do Cliente que envia a mensagem em Delphi.
É bem provável que o seu cliente Delphi não está enviando o finalizador de linha no texto.
Eu sugiro também que você use raw bytes para fazer a comunicação, pois a diferença de encoding entre as plataformas do cliente e do servidor pode causar “ruídos” na comunicação.
No caso do Java, use o DataInputStream para ler dados, e o DataOutputStream para transmitir.
G
gilvanandre
A aplicação em Delphi se comunica direitinho com outra em Delphi…
Já fiz o teste e funciona corretamente.
O problema está no meu código no Java… mas não consigo descobrir o problema!
Ele não lê o que a Aplicação em Delphi manda…
É Muito estranho porque em muitos outros fóruns aparece que eles não conseguem ler no Delphi o que o Java manda… e pra mim está sendo diferente.
R
rmendes08
gilvanandre:
A aplicação em Delphi se comunica direitinho com outra em Delphi…
Já fiz o teste e funciona corretamente.
O problema está no meu código no Java… mas não consigo descobrir o problema!
Ele não lê o que a Aplicação em Delphi manda…
É Muito estranho porque em muitos outros fóruns aparece que eles não conseguem ler no Delphi o que o Java manda… e pra mim está sendo diferente.
O travamento acontece porque o método readLine() lê caracteres do socket até que um finalizador de linha seja recebido. Enquanto ele não recebe esse finalizador de linha ele mantém a thread atual travada. Isso pode ser um grande problema, pois se um sistema usa ‘\n’ e o outro usa ‘\r’ o seu servidor vai ficar travado, esperando um caractere que nunca vai chegar.
G
gilvanandre
rmendes08:
gilvanandre:
A aplicação em Delphi se comunica direitinho com outra em Delphi…
Já fiz o teste e funciona corretamente.
O problema está no meu código no Java… mas não consigo descobrir o problema!
Ele não lê o que a Aplicação em Delphi manda…
É Muito estranho porque em muitos outros fóruns aparece que eles não conseguem ler no Delphi o que o Java manda… e pra mim está sendo diferente.
O travamento acontece porque o método readLine() lê caracteres do socket até que um finalizador de linha seja recebido. Enquanto ele não recebe esse finalizador de linha ele mantém a thread atual travada. Isso pode ser um grande problema, pois se um sistema usa ‘\n’ e o outro usa ‘\r’ o seu servidor vai ficar travado, esperando um caractere que nunca vai chegar.
Sim… compreendo! Tenho na verdade um grande problema então!
Por isso é bom pegar o Wireshark e ver exatamente o que vem pela rede. Se, como o rmendes08 falou, não vier o \n, aí vc terá que inseri-lo manualmente no Delphi, assim:
Por isso é bom pegar o Wireshark e ver exatamente o que vem pela rede. Se, como o rmendes08 falou, não vier o \n, aí vc terá que inseri-lo manualmente no Delphi, assim:
Realmente funcionou com o Chr(10), realmente é este o problema… já baixei também seus exemplos e o Wireshark.
Agora minha meta é fazer esse software rodar com uma Thread.
Não é necessário criptografar… não preciso de algo muito complexo… por isso estou fazendo dessa forma…
Minha dúvida é se irie ter problemas com a conexão do mesmo utilizando um servidor em linux e mandando os dados para esse servidor a partir da aplicação Delphi?