Android客户端c#服务器通过套接字发送图像导致去同步

本文关键字:图像 同步 套接字 客户端 服务器 Android | 更新日期: 2023-09-27 18:03:21

我有一个c#服务器,它发送25个字符串和1个编码为String64的图像。我可以每5秒发送1次或每秒发送10次,这都没关系,最终会导致去同步。

Android:

 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)

我使用log调试,一段时间后我得到一个错误说坏String64。问题是string64现在已经完全损坏了。

日志:https://justpaste.it/xhn8

正如你所看到的,它开始得很好。字符串will many 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: landing, Command

是什么导致了这个?有办法解决这个问题吗?

Android客户端c#服务器通过套接字发送图像导致去同步

修复。我必须使用BufferedReader。