我有一个C#服务器,而不是发送25个字符串和1个编码为String64的图像。我可以发送它每5秒发送一次或每秒发送10次,这没关系,最终导致去同步化。
机器人:
protected Void doInBackground(Void... arg0) {
Socket socket = null;
try {
socket = new Socket(dstAddress, dstPort);
Scanner r = new Scanner(new InputStreamReader(socket.getInputStream()));
while (true) {
//MASTER
valores[0] = r.nextLine();
valores[1] = r.nextLine();
valores[2] = r.nextLine();
valores[3] = r.nextLine();
valores[4] = r.nextLine();
valores[5] = r.nextLine();
valores[6] = r.nextLine();
valores[7] = r.nextLine();
valores[8] = r.nextLine();
valores[9] = r.nextLine();
valores[10] = r.nextLine();
valores[11] = r.nextLine();
valores[12] = r.nextLine();
//SLAVE
valores[13] = r.nextLine();
valores[14] = r.nextLine();
valores[15] = r.nextLine();
valores[16] = r.nextLine();
valores[17] = r.nextLine();
valores[18] = r.nextLine();
valores[19] = r.nextLine();
valores[20] = r.nextLine();
valores[21] = r.nextLine();
valores[22] = r.nextLine();
valores[23] = r.nextLine();
valores[24] = r.nextLine();
valores[25] = r.nextLine();
valores[26] = r.nextLine();
Log.e("MSG",valores[26]);
publishProgress(valores[0], valores[1], valores[2], valores[3], valores[4], valores[5], valores[6], valores[7], valores[8], valores[9], valores[10], valores[11], valores[12],
valores[13], valores[14], valores[15], valores[16], valores[17], valores[18], valores[19], valores[20], valores[21], valores[22], valores[23], valores[24], valores[25], valores[26]);
}
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if (socket != null) {
try {
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return null;
}
服务器C#
string conetado, bateria, tensao, altitude, roll, pitch, yaw, velx, vely, velz, estado, atual, desejado;
string conetado2, bateria2, tensao2, altitude2, roll2, pitch2, yaw2, velx2, vely2, velz2, estado2, atual2, desejado2;
conetado = master.sconetado;
bateria = master.sbateria;
tensao = master.stensao;
altitude = master.saltitude;
roll = master.sroll;
pitch = master.spitch;
yaw = master.syaw;
velx = master.svelx;
vely = master.svely;
velz = master.svelz;
estado = master.sestado;
atual = master.satual;
desejado = master.sdesejado;
conetado2 = slave.sconetado;
bateria2 = slave.sbateria;
tensao2 = slave.stensao;
altitude2 = slave.saltitude;
roll2 = slave.sroll;
pitch2 = slave.spitch;
yaw2 = slave.syaw;
velx2 = slave.svelx;
vely2 = slave.svely;
velz2 = slave.svelz;
estado2 = slave.sestado;
atual2 = slave.satual;
desejado2 = slave.sdesejado;
ImageConverter converter = new ImageConverter();
byte[] sendBytes = (byte[])converter.ConvertTo(master.picturebox_master.Image, typeof(byte[]));
string_master_frame = Convert.ToBase64String(sendBytes);
data = conetado + "\n" + bateria + "\n" + tensao + "\n" + altitude + "\n" + roll + "\n" + pitch + "\n" + yaw + "\n" + velx + "\n" + vely + "\n" + velz + "\n" + estado + "\n" + atual + "\n" + desejado + "\n" +
conetado2 + "\n" + bateria2 + "\n" + tensao2 + "\n" + altitude2 + "\n" + roll2 + "\n" + pitch2 + "\n" + yaw2 + "\n" + velx2 + "\n" + vely2 + "\n" + velz2 + "\n" + estado2 + "\n" + atual2 + "\n" + desejado2 + "\n" + string_master_frame + "\n";
send(data)
我使用日志进行了调试,一段时间后我收到错误说Bad String64。问题是string64现在已完全损坏。
LOG: https://justpaste.it/xhn8
你可以看到它开始很好。许多AAAAAA是正确的,因为图像非常黑。
一段时间后,它甚至会出现TextViews中的文字。
08-19 20:33:53.474 18854-18896 / com.example.tiago.java_android E / MSG:0? 0
08-19 20:34:02.124 19160-19199 / com.example.tiago.java_android E / MSG:Landed,Command
导致这种情况的原因是什么?有没有办法解决这个问题?
答案 0 :(得分:0)
固定。我不得不使用BufferedReader。扫描仪太慢,无法发送如此多的数据。