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();
先谢了!
请各位帮忙看下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();
先谢了!
...全文
相关推荐
安卓Socket与pc端c#服务器的通信完整代码(包含C#服务器与安卓项目工程)
在这个场景中,我们关注的是安卓客户端(Android)通过Socket与PC端的C#服务器进行通信。Socket是网络编程的基础,它允许两个程序通过网络交换数据。
安卓Android与PC TCP Socket通讯
该项目实现了安卓设备与PC之间的TCP socket通信功能。通过Android客户端发送数据,支持网络权限配置和主Activity启动设置。代码包含完整的Android清单文件及混淆规则配置,确保网
两台安卓手机通过socket 相互收发信息完整源码 android studio socket server
总的来说,通过Socket通信,两台安卓手机能够实现数据的实时交互,这对于开发聊天应用、游戏等需要实时交互的场景非常有用。理解并熟练掌握Socket编程,对提升Android应用的开发能力大有裨益。
安卓socket链接服务器接收数据APP大学生作业
在这个“安卓socket链接服务器接收数据APP大学生作业”中,我们可以深入探讨以下几个关键知识点:1.
android 安卓手机与电脑socket通信
在Android平台上,实现安卓手机与电脑之间的通信是一个常见的需求,特别是在进行远程控制、数据传输或者游戏同步等场景。本教程将深入探讨如何使用Socket通信来连接安卓设备与个人计算机。


