同样的JAVA程序,用PC和安卓手机分别都试过作为客户端与某一固定的服务端进行通讯。
奇怪的是用PC作为客户端的时候能正确显示服务端发过来得东西,而用android手机作为客户端时则只能接受一部分的数据,下面贴代码和数据:
先来PC和手机接到的数据:
PC:
AAAAAAAAAAAA|輴骗SQKZCG
手机的:
AAAAAAAAAAAA|ݐƭTS��������������������������������������������������������������������������������������������������������������������������������
可以看到,数据的内容是12个A后面跟着一些“乱码”(其实也是有用的数据),但是PC就能正确显示出来。android前面的A是正确的,后面的不知道是丢失了还是怎样。再说明一下,PC和android端的程序都是一样的!
下面贴代码,其实没什么,是个很普通的TCP客户端的代码。。服务端那边对于数据没有进行数据的特殊编码,我觉得我这边也没必要进行数据的解码转换。
代码:
public class TCP_Cilent {
/* public Socket socket;
PrintWriter out;
BufferedReader in;
InputStream is;
ByteArrayOutputStream baos;*/
public TCP_Cilent() {
// TODO Auto-generated constructor stub
}

public void send(String ip, char [] message) {
System.out.println("Client:Connecting");
try {
String a[] = ip.split("/");
socket = new Socket(a[1], SettingTabActivity.SERVER_TCP_PORT);
// 第二个参数为True则为自动flush
out = new PrintWriter(new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream())), true);
System.out.println("手持设备请求内容:"+String.valueOf(message));
out.println(message);//message

//接收来自服务器的消息  
is = socket.getInputStream();
socket.getChannel().
baos = new ByteArrayOutputStream();
int len;
byte[] b = new byte[1024];
if ((len = is.read(b)) != -1) {
System.out.println("len = " + len+a[1]);
baos.write(b, 0, len);
baos.flush();
}
byte[] data = baos.toByteArray();//new String((new String(data).getBytes("utf-8")))
System.out.println("客户端发来的消息:" + new String(data));
} catch (Exception e) {
System.out.println("Client----error1" + e.toString());
e.printStackTrace();
} finally {
            try {
             baos.close();
             out.close();
             is.close();
//in.close();
socket.close();
System.out.println("Client:Socket closed");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
}
TCP乱码PCandroid