android Socket接收数据出错问题
需要使用socket连接C#端的服务器。一开始没有使用MD5验证,后来数据安全有要求,简单加了MD5验证,结果服务器端的数据在客户端接收后总是不一致,检查了MD5值获取没有问题,断点取出发送数据和接收数据对比,发现收到的数据比发送的多。然后就加班不知道什么时候能交工了。
请各位帮忙看下android端这样写是不是有什么问题。因为C#写的客户端与服务器连接暂时没有发现问题。
new Thread(new Runnable() {
@Override
public void run() {
try {
//实例化一个socket(指定服务器ip和端口号,建立有效的TCP/IP的连接)
client = new Socket(strIPAddress, iPort);//可用代码
//获取socketStream
outStream = client.getOutputStream();
//发送一组byte[]出去
String strSendData=csmtSendData.GetSendMessageString();
byte[] b =strSendData.getBytes("UTF-8");
outStream.write(b, 0, b.length);
outStream.flush();
//至此发送数据成功
//==================
//定义开始标识,测试使用,可替换
String strStart = "DATESTART";
//定义结束标识
String strEnd = "DATEEND";
//获取数据流
InputStream inputStream = client.getInputStream();
DataInputStream input = new DataInputStream(inputStream);
//定义缓存区大小
byte[] buffer = new byte[1024];
String strRecData = "";
int length;
String Msg;
byte[] bytResult=new byte[0];
while (true) {
if (client.isConnected()) {
//读取数据
length = input.read(buffer);
Msg = new String(buffer, 0, buffer.length, "utf-8");
bytResult= addBytes(bytResult,buffer);
if (Msg.indexOf(strEnd) >= 0) {
break;
}
} else {
break;
}
}
strRecData=new String(bytResult,0,bytResult.length,"utf-8");
int start = strRecData.indexOf(strStart) + strStart.length();
int end = strRecData.indexOf(strEnd);//结束符号位置
strRecData = strRecData.substring(start, end);
String[] resultData=strRecData.split("\f");
Message msg = new Message();
String tmpS=cls_SocketMessageType.GetHashValue(resultData[0]);
if(tmpS.equals(resultData[1])){
msg.obj = strRecData;
handler.sendMessage(msg);
client.close();
}
else {
msg.obj="ConnectFailed";
handler.sendMessage(msg);
client.close();
}
}
catch(Exception ex){
Message msg=new Message();
msg.obj="ConnectFailed";
handler.sendMessage(msg);
}
finally{
}
}
}).start();
先谢了!