aplicação socket UDP

1. aplicação socket UDP

Reginaldo de Matias
saitam

(usa Slackware)

Enviado em 21/09/2013 - 23:44h

Pessoal, o código abaixo é de um exemplo de aplicação usando sockets com protocolo UDP, onde o cliente lê 2 valores envia para o servidor que efetua o cálculo da soma devolvendo o resultado para o cliente, mas o servidor não esta enviando como deveria.

Alguém poderia por gentileza analisar os fontes do CalcServerUDP e CalcClientUDP abaixo e informar onde esta o erro e como corrigir ?

CalcServerUDP.java

import java.io.*;
import java.net.*;
public class CalcServerUDP {
public static void main(String args[]) throws Exception
{
DatagramSocket serverSocket = new DatagramSocket(9876);

byte[] r1 = new byte[10];
byte[] s1 = new byte[10];
byte[] r2 = new byte[10];
byte[] s2 = new byte[10];
while(true)
{
DatagramPacket recebep1 = new DatagramPacket(r1,r1.length);
serverSocket.receive(recebep1);
DatagramPacket recebep2 = new DatagramPacket(r2, r2.length);
serverSocket.receive(recebep2);
String v1 = new String(recebep1.getData());
String v2 = new String(recebep2.getData());
int port = recebep1.getPort();
int valor1 = Integer.parseInt(v1);
int valor2 = Integer.parseInt(v2);
int res = valor1 + valor2;
String result = String.valueOf(res);
InetAddress ip = recebep1.getAddress();
s1 = result.getBytes();
DatagramPacket sendPacket = new DatagramPacket(s1,s1.length, ip, port);
serverSocket.send(sendPacket);
System.out.println("Resultado = " + res);


}
}
}



CalcClientUDP.java

import java.io.*;
import java.net.*;
public class CalcClientUDP {
public static void main(String args[]) throws Exception
{
BufferedReader entrada = new BufferedReader(new InputStreamReader(System.in));
DatagramSocket clientSocket = new DatagramSocket();
InetAddress ip = InetAddress.getByName("localhost");

byte[] env1 = new byte[10];
byte[] env2 = new byte[10];
byte[] rec1 = new byte[10];
byte[] rec2 = new byte[10];
String strv1, strv2;
System.out.println("valor 1: ");
strv1 = entrada.readLine();
System.out.println("valor2 :");
strv2 = entrada.readLine();
env1 = strv1.getBytes();
env2 = strv2.getBytes();
DatagramPacket envp1 = new DatagramPacket(env1,env1.length,ip,9876);
clientSocket.send(envp1);
DatagramPacket envp2 = new DatagramPacket(env2,env2.length,ip,9876);
clientSocket.send(envp2);
/*DatagramPacket recp1 = new DatagramPacket(rec1,rec1.length);
clientSocket.receive(recp1);
DatagramPacket recp2 = new DatagramPacket(rec2,rec2.length);
clientSocket.receive(recp2);
String result = new String(recp1.getData()+recp2.getData());
String.out.println("Resultado = " +result);*/
clientSocket.close();
}
}





  


2. Re: aplicação socket UDP

Reginaldo de Matias
saitam

(usa Slackware)

Enviado em 22/09/2013 - 15:15h

Então pessoal, veja o que ocorre se executar os fontes acima...

servidor
$java CalcServerUDP

abaixo aparece quando ler o segundo valor no CalcClientUDP

Exception in thread "main" java.lang.NumberFormatException: For input string: "1"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:492)
at java.lang.Integer.parseInt(Integer.java:527)
at UDPServer.main(UDPServer.java:32)


cliente
$java CalcClientUDP
valor 1:
1
valor2 :
1

quando o valor2 é lido é mostrado no CalcServerUDP a mensagem
"Exception in thread "main" java.lang.NumberFormatException: For input string: "1"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:492)
at java.lang.Integer.parseInt(Integer.java:527)
at UDPServer.main(UDPServer.java:32)"


Alguém poderia analisar os fontes no primeiro post e informar o erro e como corrigir, se souber ?





3. Re: aplicação socket UDP

Rodrigo Brzoski
brezo

(usa Slackware)

Enviado em 22/09/2013 - 17:39h

ele deve estar lendo o número como string "String strv1, strv2;" tenta converter para inteiro...
eu tenho um exemplo de comunicação aqui se quiser deixa seu email para envio...


4. Re: aplicação socket UDP

Reginaldo de Matias
saitam

(usa Slackware)

Enviado em 22/09/2013 - 17:46h

brezo escreveu:

ele deve estar lendo o número como string "String strv1, strv2;" tenta converter para inteiro...
eu tenho um exemplo de comunicação aqui se quiser deixa seu email para envio...


Esse exemplo de comunicação utiliza protocolo UDP ?

Se sim, pode mandar por e-mail que encontra no INBOX do perfil VOL.

Mas eu fiz essa conversão para inteiro, pode conferir no código acima...

Se possível efetuar testes no código postado e mandar correção informando o motivo do erro, seria grato.




5. Re: aplicação socket UDP

Rodrigo Brzoski
brezo

(usa Slackware)

Enviado em 22/09/2013 - 18:02h

mandei nos scripts Java -> Rede
Parece igual esse:
http://vivaolinux.com.br/script/Comunicacao-atraves-de-datagramas


6. Re: aplicação socket UDP

Reginaldo de Matias
saitam

(usa Slackware)

Enviado em 22/09/2013 - 18:33h

brezo escreveu:

mandei nos scripts Java -> Rede
Parece igual esse:
http://vivaolinux.com.br/script/Comunicacao-atraves-de-datagramas


Opa, esse exemplo utiliza apenas o envio de uma string do cliente para o servidor.




7. Re: aplicação socket UDP

Reginaldo de Matias
saitam

(usa Slackware)

Enviado em 22/09/2013 - 18:34h

No meu caso, a aplicação é de uma calculadora remota usando protocolo UDP.

O cliente solicita 2 valores (valor1, valor2) envia esses valores para o servidor, onde é feito o cálculo retornando o resultado da soma de valor1+valor2 recebido do cliente.

Porém, tem algum erro que ainda não detectei.

Estou enviando 2 valores para o servidor efetuar o cálculo e assim mandar o resultado para o cliente.

Postei o código acima do primeiro post no pastebin

CalcServerUDP.java: http://pastebin.com/xHM6Dxn7

CalcClientUDP.java: http://pastebin.com/2Liq7MYi


Favor, compilar e executar os códigos acima para entender e poder ajudar com correção.





8. Re: aplicação socket UDP

Reginaldo de Matias
saitam

(usa Slackware)

Enviado em 22/09/2013 - 21:48h

Alguém por gentiliza poderia olhar os fontes CalcServerUDP.java e CalcClientUDP.java e verificar o que pode estar ocorrendo para corrigir o problema ?






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts