私はサーバー上で毎秒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)で
「valores」とは何ですか? – greenapps
文字列配列。サーバからのデータを取得するだけです。 –
'string_master_frame'はバリュー[[]]になります。どれ? – greenapps