socket servidor para librerias datagrampacket comunicacion cliente java android udp bytearray

servidor - socket tcp java



Cómo recuperar Cadena de DatagramPacket (2)

Esta pregunta ya tiene una respuesta aquí:

El siguiente código imprime

[B@40545a60,[B@40545a60abc exp

Pero quiero imprimir abc , para poder recuperar el mensaje correcto del sistema receptor.

public class Operation { InetAddress ip; DatagramSocket dsock; DatagramPacket pack1; byte[] bin,bout; WifyOperation(InetAddress Systemip) { ip=Systemip; try { dsock=new DatagramSocket(); } catch (SocketException e) { // TODO Auto-generated catch block e.printStackTrace(); } } void sendbyte() { String senddata="abc"; bout=senddata.getBytes(); pack1=new DatagramPacket(bout,bout.length,ip,3322); try { dsock.send(pack1); Log.d(pack1.getData().toString(),"abc exp"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }

¿Cómo puedo recuperar cadenas en lugar de bytes del paquete pack1 ?


Puede intentar: String msg = new String(pack1.getData(), pack1.getOffset(), pack1.getLength());


Nueva respuesta basada en el comentario:

De hecho, mi respuesta anterior era incorrecta. Actualizar:

String str = new String( pack1.getData(), pack1.getOffset(), pack1.getLength(), StandardCharsets.UTF_8 // or some other charset );

Respuesta anterior:

Haz algo como:

byte[] data = pack1.getData(); InputStreamReader input = new InputStreamReader( new ByteArrayInputStream(data), Charset.forName("UTF-8")); StringBuilder str = new StringBuilder(); for (int value; (value = input.read()) != -1; ) str.append((char) value);

Esto supone que los datos de bytes representan (solo) texto UTF-8, que puede no ser el caso.