解决了安卓客户端和服务器端交互的较常见问题
原文地址:http://doublekj.blog.163.com/blog/static/146818474201171832955120/
以下是代码:
String s="***********\0";
//这里的\0是因为服务器端指定发送的消息必须跟着结束符。而直接用println(s)传送时出现错误,因为string 类是没有'0'结束符的。
char[] msg_01=new char[s.length()];
msg_01 = s.toCharArray(); //这里将字符串转换为一个字符数组,而char是有结束符的。服务器能接收到正确的消息并给予回应。
//byte[] msg_03=new byte[100];
//msg_03=s.getBytes();
//将字符串转为字节数组,在本机上观察到的msg_03数据是正确的,但是服务器端接收的数据并不准确。个人认为可能在数据流传输时出现错误,之前看到的demo只有字符串和字符数组的传送,不知道字节数组可不可以。
// 创建socket对象,指定服务器端地址和端口号
//ClientSocket = new Socket(Address, Port);
ClientSocket=new Socket();
ClientSocket.connect(new InetSocketAddress(Address, Port), SOCKET_TIMEOUT);
Isconnect=ClientSocket.isConnected();
//之前不确定通道是否连通,自己加的测试。
if(Isconnect){
mTextView_03.setText("连接成功!");
}
else{ mTextView_03.setText("连接失败!");}
// 获取 Client 端的输出流
PrintWriter out = new PrintWriter(new BufferedWriter(
new OutputStreamWriter(ClientSocket.getOutputStream())), true);
// 填充信息
out.println(msg_01);
System.out.println("msg=" + s);
// 接受信息
BufferedReader br = new BufferedReader(
new InputStreamReader(ClientSocket.getInputStream()));
String msg_02 = br.readLine();
//如果服务器端发送的数据有加换行符\n,是可以正常接收的。但是服务器设置发送的是没有换行符的,所以接收数据会出现错误,我需要改为一个字符一个字符的接收,没那么方便,悲剧~~
嗯,后来用的是这样的方法:
//char[] m=new char[100];
// br.read(m);
// String msg_02=new String(m);
if (msg_02 != null) {
mTextView_04.setText(msg_02);
} else {
mTextView_04.setText("数据错误!");
}
// 关闭流 和socket
out.close();
br.close();
ClientSocket.close();