[resolvido]comparar strings em udp

3 respostas
S

//Oi não estou conseguindo comparar strings neste meu programa cliente servidor usando socket udp, oque há de errado?

// if(     rec.equals(“resposta”)){System.out.println(“ok1”);}

else{System.out.println(ok);}

//Não é executado corretamente
//O cliente manda mensagens para o servidor, o servidor por sua vez  compara a string recebida com resposta se for igual imprime ok1 senão ok,  que isto não está ocorrendo é sempre impresso ok.

//Programa servidor

import <a href="http://java.io">java.io</a>.<em>;

import <a href="http://java.net">java.net</a>.</em>;
public class Servidor

{

public static void main(String[] args)

{

DatagramSocket socket=null;

DatagramPacket recvPacket, sendPacket;

try

{

System.out.println("=== ��� Servidor de eco no ar !!! ��� ===");

socket=new DatagramSocket(4545);

String rec=null;

while(socket!=null)

{

recvPacket=new DatagramPacket(new byte[512], 512);

socket.receive(recvPacket);

rec= new String (recvPacket.getData());

System.out.println(digitou+ "    "+rec);

sendPacket=new DatagramPacket(recvPacket.getData(), recvPacket.getLength(),

recvPacket.getAddress(), recvPacket.getPort());

socket.send(sendPacket);

System.out.println("Mensagem recebida do Cliente: "+recvPacket.getAddress()+

:+recvPacket.getPort());

if(     rec.equals(resposta)){System.out.println(ok1);}

else{System.out.println(ok);}
int c=recvPacket.getLength();
    System.out.print("=> ");
    
   
    System.out.println(new String (recvPacket.getData()));
    System.out.print("\r\n");
    System.out.print("\r\n");
  }
}
catch(SocketException se)
{
  System.out.println("Erro no ServidorDatagrama: "+se);
}
catch(IOException ioe)
{
  System.out.println("Erro no ServidorDatagrama: "+ioe);
}

}
}

//programa cliente

import <a href="http://java.io">java.io</a>.<em>;

import <a href="http://java.net">java.net</a>.</em>;

import javax.swing.*;

public class Cliente

{

private DatagramSocket socket=null;

private DatagramPacket recvPacket, sendPacket;

public static void main(String[] args)

{

DatagramSocket socket=null;

DatagramPacket recvPacket, sendPacket;

try

{

socket=new DatagramSocket();

InetAddress hostAddress=InetAddress.getByName(127.0.0.1);

DataInputStream userData=new DataInputStream(System.in);

while (socket !=null)

{

//leitura da mensagem para enviar para o servidor Datagrama

System.out.print(Mensagem para enviar: );

String userString=JOptionPane.showInputDialog(digite algo);

if ((userString==null)||(userString.equals(””)))

return;
//converte o String para um Array de bytes
    byte sendbuf[]=new byte[userString.length()];
    userString.getBytes(0,userString.length(),sendbuf,0);
    sendPacket=new DatagramPacket(sendbuf, sendbuf.length, hostAddress, 4545);

    //envia o Datagrama para o servidor
    socket.send(sendPacket);

    //recebe o Datagrama do servidor
    recvPacket=new DatagramPacket(new byte[512], 512);
    socket.receive(recvPacket);

    //exibe na tela do cliente a mensagem de eco do servidor Datagrama
    System.out.print("Mensagem recebida (eco): ");
    System.out.write(recvPacket.getData(),0,recvPacket.getLength());
    System.out.print("\r\n");
    System.out.print("\r\n");
  }
}
catch(SocketException se)
{
  System.out.println("Erro no ClienteDatagrama: "+se);
}
catch(IOException ioe)
{
  System.out.println("Erro no ClienteDatagrama: "+ioe);
}

}
}

3 Respostas

A

O que acontece de errado?

“Obs.: Tente deixar o código o mais clean possível assim ajuda quem está tentando ajudar você”.

rogeriopaguilar

substitui a linha
if (rec.equals(“resposta”)) {

por

if (rec.trim().equals(“resposta”)) {

Você criou um buffer de tamanho 512, então quando vc transforma os bytes que chegaram em string
ela fica com vários espaços em branco, então vc tem que retirá-los antes de comparar.

Até mais!

rogeriopaguilar

Uma outra forma seria construir a String apenas com os dados que chegaram realmente,
substituindo a linha:

rec = new String(recvPacket.getData());

por

rec = new String(recvPacket.getData(), 0, recvPacket.getLength());

Essa forma é melhor pq vc constrói a String com tamanho certo. Se utilizar esta forma a alteração que sugeri anteriormente
pode ser descartada.

[]'s

Criado 7 de abril de 2011
Ultima resposta 7 de abr. de 2011
Respostas 3
Participantes 3