servidor - socket tcp java
Cómo recuperar Cadena de DatagramPacket (2)
Esta pregunta ya tiene una respuesta aquí:
- DatagramPacket to string 5 respuestas
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.