2016-08-19 4 views
0

私はサーバー上で毎秒x回画像を送信しています(基本的にはビデオストリームです)。Android - C#サーバーからソケット経由で画像を受信(ほぼ完了)

master.frame_drone.Bitmapは画像

C#のサーバ

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); 


    } 

ですだから私は、それは基本的に画像のサーバーから文字列を取得します。

のAndroidクライアント

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); 

} 

}

私の問題は、私はすべてのTextViewsがうまく働いていたが、私は、文字列を導入する際valores[26]すべてがdesyncronizing起動し、すべての\nを使用して線で、文字列のラインを読むことですたとえば、valores[0]valores[26]などのデータの一部を取得します。

文字列を取得するにはどうすればよいですか?サーバをオフにしてImageViewに表示しますか?

EDIT:

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

勤務。今、データはミックスされません。最後の1つの質問:

私のonProgressUpdateの中で、私は文字列をデコードしようとしました。

byte[] decodedString = Base64.decode(values[26],Base64.DEFAULT); 
    Bitmap master_bitmap = BitmapFactory.decodeByteArray(decodedString,0,decodedString.length); 
    master_frame.setImageBitmap(master_bitmap); 

プロセス:com.example.tiago.java_android、PID:3510 java.lang.IllegalArgumentExceptionが:悪いベース64 android.util.Base64.decode(Base64.java:161)で android.util.Base64.decodeでandroid.util.Base64.decode(Base64.java:136) (Base64.java:118)で

+0

「valores」とは何ですか? – greenapps

+0

文字列配列。サーバからのデータを取得するだけです。 –

+0

'string_master_frame'はバリュー[[]]になります。どれ? – greenapps

答えて

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

Chのそれには:

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

    while(true) { 
+0

しかし、私はいつもそのデータを読む必要があります。 –

+0

はい。あなたがやる。あなたはループを維持する。 – greenapps

+0

サーバは基本的にDrone(すべての最初のパラメータ)のナビゲーションデータと画像(master.frame_drone)を送信します –

関連する問題