android Socket接收数据出错问题

Water Lee 2019-03-13 04:17:43
需要使用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();
先谢了!
...全文
648 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
王能 2019-03-14
  • 打赏
  • 举报
回复
收到的比发送的多具体多了哪些自己和后台对比一下不就行了
Water Lee 2019-03-13
  • 打赏
  • 举报
回复
C#获取MD5值
public static string GetHashValue(string inputdata)
{
MD5CryptoServiceProvider md5Hasher = new MD5CryptoServiceProvider();
char[] temp = inputdata.ToCharArray();
byte[] buf = new byte[temp.Length];
for (int i = 0; i < temp.Length; i++)
{
buf[i] = (byte)temp[i];
}
byte[] data = md5Hasher.ComputeHash(buf);
StringBuilder sBuilder = new StringBuilder();
for (int i = 0; i < data.Length; i++)
{
sBuilder.Append(data[i].ToString("x2"));
}
return sBuilder.ToString();
}

Android端获取MD5值
public static String GetHashValue(String inputdata) {

byte[] byteHash;
StringBuilder mdBuilder=new StringBuilder();
try {
byteHash=MessageDigest.getInstance("MD5").digest(inputdata.getBytes("UTF-8"));
}catch (NoSuchAlgorithmException e) {
return null;
} catch (UnsupportedEncodingException e) {
return null;
}

StringBuilder hex = new StringBuilder();
for (byte b : byteHash) {
if ((b & 0xFF) < 0x10)
hex.append("0");
hex.append(Integer.toHexString(b & 0xFF));
}

return hex.toString();
}

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧