2012-02-02 15 views
5

escribo cliente socket:androide DataOutputStream.writeUTF toma

clientSocket = new Socket("192.168.1.102", 15780); 
outToServer = new DataOutputStream(clientSocket.getOutputStream()); 

Todas las obras. Pero no voy a enviar al servidor UTF -8 mensajes de formato y lo hago:

outToServer.writeBytes("msg#");//server tag 
outToServer.writeUTF("hello"); 
//outToServer.writeUTF(str); //or another string 
outToServer.writeBytes("\n"); 
outToServer.flush(); 

Los mensajes se convierten en tales:

secret byte

Dime por favor, ¿por qué? ¿Cómo enviar mensajes UTF correctamente?

Respuesta

15

writeUTF() documentation dice:

En primer lugar, dos bytes se escriben en el flujo de salida como por el método writeShort dar el número de bytes que siguen. Este valor es la cantidad de bytes realmente escritos, no la longitud de la cadena.

Puede codificar la cadena como UTF-8 a sí mismo y luego enviar la matriz de bytes resultante al servidor utilizando write():

byte[] buf = "hello".getBytes("UTF-8"); 
outToServer.write(buf, 0, buf.length);