Tenho uma dúvida em relação a tarefa que tenho que fazer… Tenho que enviar um XML para o servidor na porta 60001 para que ele me retorne um outro XML, mas o problema é que eu não tenho muito noção de como fazer isso, Estou postando o meu fonte que tentei executar mas sem sucesso… não tenho certeza se esse código realmente supri as minhas necessidades, pois nunca mexi com a classe Socket e nem sei se esse seria o jeito mais simples de fazer.
Por acaso alguém pode me ajudar?
packagemeupacote;importjava.io.ObjectInputStream;importjava.io.ObjectOutputStream;importjava.net.Socket;publicclassServerConnection{publicServerConnection(){try{Socketsocket=newSocket("meu.ip.em.string",60001);ObjectInputStreamin=newObjectInputStream(socket.getInputStream());ObjectOutputStreamout=newObjectOutputStream(socket.getOutputStream());// O XML que será enviadoStringxml="<?xml version=\"1.0\" encoding=\"UTF-8\"?> "+"<BotMessage messageType=\"Request\"> "+"<UUID value=\"60b6c9t2-y568-4o83-bte6-d36585cba749\"/> "+"<param name=\"RequestType\" value=\"INFO\"/> "+"<param name=\"InfoMethod\" value=\"2:aboutus\"/> "+"<param name=\"Test\" value=\"test.com\"/> "+"</BotMessage>";out.writeObject(xml);Stringresp=(String)in.readObject();System.out.println(resp);out.close();in.close();socket.close();}catch(Exceptione){e.printStackTrace();}}publicstaticvoidmain(String[]args){newServerConnection();}}
Obrigado.
PS: O servidor é linux e para testar se realmente funciona eu executo isso no servidor - cat teste_de_xml.xml | nc localhost 60001
Você não pode usar ObjectInput/OutputStream. No seu caso, provavelmente você deve usar diretamente o InputStream ou OutputStream retornado pelo socket, e você tem de converter e desconverter a string XML para um array de bytes.
G
gumatias
thingol:
Você não pode usar ObjectInput/OutputStream. No seu caso, provavelmente você deve usar diretamente o InputStream ou OutputStream retornado pelo socket, e você tem de converter e desconverter a string XML para um array de bytes.
Muito Obrigado pela rápida resposta thingol, eu fiz uns pequenos testes e ainda não obtive sucesso.. acho que esteja fazendo algo de errado... tentei o código abaixo e obtive a seguinte exceção:
a) Não seria interessante você pegar também a InputStream?
b) Já que você começou a testar, veja se o tal “id.do.meu.servidor” resolve para um endereço válido na máquina que está rodando seu programa.
G
gumatias
thingol:
a) Não seria interessante você pegar também a InputStream?
b) Já que você começou a testar, veja se o tal “id.do.meu.servidor” resolve para um endereço válido na máquina que está rodando seu programa.
Obrigado thingol,
Bom… eu coloquei a InputStream, agora quando coloco o ip do servidor ainda gera a mesma exceção… só que estou conectado no servidor via Putty utilizando a porta 2222… e no código quando eu coloco a porta 2222 ele roda normalmente… só que o problema é que eu tenho que enviar o XML pela porta 60001 que é a que retorna o XML de resposta… será que eu tenho que usar o Socket(“ip.do.servidor”, 2222) e depois enviar o XML pela porta 60001? Se sim, como farei isso?
Obrigado.
T
thingol
Vou fazer uma pergunta séria. Se você der o seguinte comando pelo Windows (em um Prompt de Comando; talvez tenha de instalar o telnet.exe)
telnetid.do.meu.servidor60001
O que ocorre?
a) Aparece uma tela preta quase instantaneamente. Talvez apareça alguma sujeira. Talvez, depois de algum tempo, a tela feche sozinha.
b) O telnet fica preso, tentando se conectar. Ou então ele mostra uma mensagem parecida com a seguinte:
Se for o caso “b”, então verifique se o firewall do Windows está habilitado para você poder conectar-se a outra máquina pela porta 60001.
Se for o caso “a”, não haveria porque seu programa não funcionar direito.
Acho que é o caso “b”. Se for isso, cheque a conectividade da sua máquina para o tal servidor que atende na 60001.
G
gumatias
thingol:
só que estou conectado no servidor via Putty utilizando a porta 2222
Vou fazer uma pergunta séria. Se você der o seguinte comando pelo Windows (em um Prompt de Comando; talvez tenha de instalar o telnet.exe)
telnetid.do.meu.servidor60001
O que ocorre?
a) Aparece uma tela preta quase instantaneamente. Talvez apareça alguma sujeira. Talvez, depois de algum tempo, a tela feche sozinha.
b) O telnet fica preso, tentando se conectar. Ou então ele mostra uma mensagem parecida com a seguinte:
Se for o caso “b”, então verifique se o firewall do Windows está habilitado para você poder conectar-se a outra máquina pela porta 60001.
Se for o caso “a”, não haveria porque seu programa não funcionar direito.
Acho que é o caso “b”. Se for isso, cheque a conectividade da sua máquina para o tal servidor que atende na 60001.
Hmmm… valeu thingol! no meu caso deu a “b”… vou dar uma mexida no firewall aqui e ver se o telnet responde como deveria, qualquer novidade eu volto a postar.
Obrigado pela atenção!
G
gumatias
Após mais outros testes, eu descidi executar minha classe diretamente no servidor felizmente rodou sem gerar a exceção, e depois que estiver rodando eu me preocuparei de como rodar na minha máquina...
No código abaixo ele roda normalmente na porta 60001 com o localhost, só que se eu descomentar a parte comentada ele não roda.. acho que não devo estar enviando o XML corretamente pelo InputStream e OutputStream, alguma dica?