Android - 从C#服务器通过套接字接收图像(几乎完成)

时间:2016-08-19 13:17:15

标签: c# android image sockets

我在服务器上每秒发送一次图像(它基本上是一段视频流)。

wget是图片

C#服务器

master.frame_drone.Bitmap

所以我从服务器得到一个字符串,它基本上是图像。

Android客户端

 private void send_data()
    {

            string data = "";


            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.frame_drone.Bitmap, 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";

            tcpServer1.Send(data);


    }

}

我的问题是我使用 protected Void doInBackground(Void... arg0) { Socket socket = null; try { socket = new Socket(dstAddress, dstPort); while(true) { Scanner r = new Scanner(new InputStreamReader(socket.getInputStream())); /* * notice: inputStream.read() will block if no data return */ //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(); 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]); } @Override protected void onProgressUpdate(String... values) { super.onProgressUpdate(values); conetado.setText(values[0]); bateria.setText(values[1]); tensao.setText(values[2]); altitude.setText(values[3]); roll.setText(values[4]); pitch.setText(values[5]); yaw.setText(values[6]); velx.setText(values[7]); vely.setText(values[8]); velz.setText(values[9]); estado.setText(values[10]); atual.setText(values[11]); desejado.setText(values[12]); conetado2.setText(values[13]); bateria2.setText(values[14]); tensao2.setText(values[15]); altitude2.setText(values[16]); roll2.setText(values[17]); pitch2.setText(values[18]); yaw2.setText(values[19]); velx2.setText(values[20]); vely2.setText(values[21]); velz2.setText(values[22]); estado2.setText(values[23]); atual2.setText(values[24]); desejado2.setText(values[25]); Bitmap master_bitmap = BitmapFactory.decodeByteArray(values[26].getBytes(),0,values[26].length()); master_frame.setImageBitmap(master_bitmap); } 逐行读取字符串所有\n都运行良好但是当我引入字符串TextViews时,所有内容都开始去同步并且所有值都混合在一起例如:valores[26]现在获取valores[0]等的一些数据......

如何从服务器获取字符串并将其显示在valores[26]

修改

ImageView

的工作。现在数据没有混合。最后一个问题:

在我的onProgressUpdate中,我试图解码字符串并且没有用。

Scanner r = new Scanner(new InputStreamReader(socket.getInputStream()));
while(true) {
  

流程:com.example.tiago.java_android,PID:3510                                                                                 java.lang.IllegalArgumentException:bad base-64                                                                                     在android.util.Base64.decode(Base64.java:161)                                                                                     在android.util.Base64.decode(Base64.java:136)                                                                                     在android.util.Base64.decode(Base64.java:118)

1 个答案:

答案 0 :(得分:0)

     while(true) {
            Scanner r = new Scanner(new InputStreamReader(socket.getInputStream()));

将其更改为:

    Scanner r = new Scanner(new InputStreamReader(socket.getInputStream()));

    while(true) {