Android客户端C#服务器通过套接字发送图像导致Desyncronization

时间:2016-08-19 19:43:47

标签: c# android image sockets

我有一个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

导致这种情况的原因是什么?有没有办法解决这个问题?

1 个答案:

答案 0 :(得分:0)

固定。我不得不使用BufferedReader。扫描仪太慢,无法发送如此多的数据。