não estou conseguindo deixar o servidor udp (java.nio) no ar escutando uma porta.
alguem pode me ajudar
...DatagramChannelchannel=DatagramChannel.open();DatagramSocketsocket=channel.socket();socket.bind(newInetSocketAddress(portNumber));while(true){try{ByteBufferpacketIn=ByteBuffer.allocate(packetSize);intleitura=channel.read(packetIn);...}catch(Exceptione){System.out.println("Socket fora do ar "+e.getMessage());}...
catch(Exception e){
System.out.println("Socket fora do ar " + e.getMessage());
}
mas sim isso
catch(Exception e){
System.out.println("Socket fora do ar." );
e.printStackTrace();
}
S
Siborges
Salve Lipe
o que ocorre é que o socket não recebe a mensagem, ele fica no loop sempre imprimindo a Exception. Não sei se tem algum outro jeito de fazer um servidor com o DataGramChannel.
Sobre o e.printStackTrace() ele faria o java parar de rodar, não é. E isto não pode ocorrer …
valeuz
[]´s
Luiz
Rafael_Nunes
Siborges:
Sobre o e.printStackTrace() ele faria o java parar de rodar, não é. E isto não pode ocorrer …
Nope, ele vai imprimir o Stack Trace, toda a ‘rota de objetos’ que foi seguida. Com o e.getMessgae() ele vai imprimir somente a mensagem de erro.
S
Siborges
Valeu Rafael…
valeu mesmo cara, achava que ele cortava o programa…
Pelo que entendi, me parece que ele não esta agindo como um servidor de socket, e sim como um cliente…
C
cecaldas
Qual o objetivo, da sua aplicação? Vc é obrigado a usar DatagramChannel?
S
Siborges
Por azar meu, sim… sou obrigado a usar Datagram…
tenho um sistema unix que se conecta em um servidor udp e passa os dados. Preciso que o server em java fique escutando a porta “X” para receber esses dados.
C
cecaldas
//EnviarInetAddressIPAddress=InetAddress.getByName("127.0.0.1");DatagramSocketclientSocket=newDatagramSocket();byte[]sendData=newbyte[1024];DatagramPacketsendPacket=newDatagramPacket(sendData,sendData.length,IPAddress,9876);clientSocket.send(sendPacket);//Receberpraficarrecebendoinifinitamente,colocaalgumloopdotipowhile(true)DatagramSocketserverSocket=newDatagramSocket(9876);//porta q ficará sendo escutadabyte[]receiveData=newbyte[1024];DatagramPacketreceivePacket=newDatagramPacket(receiveData,receiveData.length);serverSocket.receive(receivePacket);
cv1
Luiz, esse while(true) nao ta com uma cara boa - voce nao pode fazer com que a condicao do while seja o socket estar conectado? A excecao que vc esta levando eh bem clara: voce esta tentando dar um read() num socket que esta Not Yet Connected
S
Siborges
Ai é que tá…
eu estou usando a biblioteca java.nio devido as facilidades que o ByteBuffer me garante. E queria usar o DatagramChannel não o DatagramSocket do java.io
S
Siborges
Cv.
eu tentei utilizar o while(channel.isConnected())
mas como na primeira passagem o cara não estava conectado ele pulava pra proxima instrução após o while e encerrava o socket.
cv1
Bom, entao vc tem um problema com a sua logica, nao com a API da New I/O
S
Siborges
Pode ser tb, cara… nunca descartei isso, até estou vendo se consigo ajuda com a galera do guj…