2012-02-02 43 views
5

tôi viết client socket:android ổ cắm DataOutputStream.writeUTF

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

Tất cả các công trình. Nhưng tôi wont gửi đến máy chủ UTF -8 thông điệp dạng và làm như vậy:

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

Tin nhắn trở nên như vậy:

secret byte

Cho tôi xin vui lòng tại sao? Cách gửi tin nhắn UTF đúng cách?

Trả lời

15

writeUTF() documentation nói:

Đầu tiên, hai byte được ghi vào dòng đầu ra như nếu theo phương pháp writeShort cho số byte để làm theo. Giá trị này là số byte thực sự được viết ra, không phải độ dài của chuỗi.

Bạn có thể mã hóa các chuỗi như utf-8 cho mình và sau đó gửi các mảng byte kết quả đến máy chủ sử dụng write():

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