DatagramPacket.getData() > como leio sem caracteres invalidos?

2 respostas
L

olá,

estou tendo problema ao enviar uma String para um outro pc qualquer na rede, e quando ele recebe, vem um monte de quadradinho junto que dificulta a leirura, esses quadradinhos são sobra do tamanho do DatagramPacket, alguem sabe como posso estraí-los, para ficar somente a string?

notas: ambos os buff tem o mesmo tamanho.

trecho do codigo de envio:

byte[] msg=c.getBytes(); //c é do tipo string; InetAddress i = InetAddress.getByName(h.getIphost()); DatagramPacket pacote= new DatagramPacket(msg,msg.length,i,10000); cliente.send(pacote);

trecho do codigo do recebimento

socket.receive(packet);
core.c = new String(packet.getData()); //[b]provavel erro de leitura[/b]
socket.close();

2 Respostas

T
core.c = new String(packet.getData()); //[b]provavel erro de leitura[/b]

Repetindo mil e uma vezes.
NUNCA ARMAZENE BYTES EM UMA STRING quando você queria armazenar um array de bytes.
Dá um monte de problemas.
O primeiro deles é que gasta O DOBRO de espaço.
O segundo é que muitos dos bytes são convertidos para o caracter “?” (interrogação).
O terceiro é que maçãs são maçãs e laranjas são laranjas.

De qualquer maneira, se você insiste nisso (e está preparado para fazer um monte de gambiarras no seu programa) você pode tentar:

core.c = new String(packet.getData(), "ISO-8859-1");

Mas não recomendo isso. Use um array de bytes.

L

Brigado pela resposta, mas outra maneira seria o método String.trim(); se eu estou usando byte não é porque eu quero mas é o metodo de DatagramSocket.send() que exige que a menssagem seja em bytes, talvez na conversão tenha feito errado, mas valeu, não sabia dessa relação entre Strings e bytes.

Criado 18 de maio de 2006
Ultima resposta 18 de mai. de 2006
Respostas 2
Participantes 2