同样的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
奇怪的是用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
解决方案 »
- 安卓运行提示错误未定义
- 动态填充TableLayout,如何让表格充满屏幕?如何设置动态生成的Textview的字体大小?
- 怎么修改2.3android系统中的通讯录Contacts
- android三级菜单
- android中xml的解析问题
- 这个错误是怎么回事?
- 安卓引入fragment之后,程序写法发生了变化,新写法写的应用能在旧版本上运行吗?
- 如何使用百度云 API 推送富媒体消息,百度推送的富媒体发送官方接口是什么?
- 当前activity怎么获得mainactivity开的子线程socket收到的数据?
- 急求关于service存活问题的答案
- (android编程)在adt中启动模拟器,并且运行新建好的项目console出现情况如下。项目没在在模拟器中显示。
- 大家遇到过发个intent到本机的market类应用做评价,报异常吗
在客户端接收时定义相应的接受消息编码方式
服务端和客户端都在pc上,他传输时用的是默认的编码格式,故编码格式一致,而android用的编码格式与其不同,就造成乱码了。所以你在传输时,在两端都指明编码格式,就行了