Hola señores/as,
Abro este post porque estoy desesperado y no he recibido respuesta en 4 foros supuestamente activos de Android, uno de ellos http://stackoverflow.com/, en el que he preguntado dos veces.
Estoy desarrollando una aplicacion Cliente/Servidor en Android que realiza un acceso remoto a un pc mediante Sockets. He estado buscando informacion sobre como realizar un escritorio remoto y segun he leido la mayoria de las apps y programas que se dedican a ello realizan capturas de pantalla para simular la vista del escritorio remoto a tiempo real. Quise empezar por ahi y me puse a probar primero en Java desde un pc a otro con exito. Ahora estoy probandolo desde el movil al pc, pero tengo un problema, y es que al recibir las imagenes y colocarlas en un ImageView no se refresca salvo cuando termina la ejecucion del evento, que muestra la ultima captura tomada. A partir de aqui me gustaria preguntar dos cosas:
La primera es si alguien conoce una forma mejor (que las habra seguro) de establecer un escritorio remoto, tanto de Android como de Java, me gustaria aprender bien como manejarlo y adaptarme a cualquier sistema, ya que me parece un tema interesante.
La segunda pregunta esta relacionada con mi codigo, por si alguien sabe que falla.
Cliente
Servidor
(Si veis cosas que sobran es por las diversas pruebas que he ido haciendo con ambas clases )
Se trata de parte de mi proyecto de fin de curso, por lo que agradezco cualquier informacion que me sirva y estare eternamente agradecido a todo aquel que pueda ayudarme. Gracias! (Una vez lo termine subire el codigo)
Abro este post porque estoy desesperado y no he recibido respuesta en 4 foros supuestamente activos de Android, uno de ellos http://stackoverflow.com/, en el que he preguntado dos veces.
Estoy desarrollando una aplicacion Cliente/Servidor en Android que realiza un acceso remoto a un pc mediante Sockets. He estado buscando informacion sobre como realizar un escritorio remoto y segun he leido la mayoria de las apps y programas que se dedican a ello realizan capturas de pantalla para simular la vista del escritorio remoto a tiempo real. Quise empezar por ahi y me puse a probar primero en Java desde un pc a otro con exito. Ahora estoy probandolo desde el movil al pc, pero tengo un problema, y es que al recibir las imagenes y colocarlas en un ImageView no se refresca salvo cuando termina la ejecucion del evento, que muestra la ultima captura tomada. A partir de aqui me gustaria preguntar dos cosas:
La primera es si alguien conoce una forma mejor (que las habra seguro) de establecer un escritorio remoto, tanto de Android como de Java, me gustaria aprender bien como manejarlo y adaptarme a cualquier sistema, ya que me parece un tema interesante.
La segunda pregunta esta relacionada con mi codigo, por si alguien sabe que falla.
Cliente
Código [Seleccionar]
public class MainActivity extends Activity {
static Button boton;
static Button boton2;
static byte[] imagen;
static ImageView imagenVista;
//static Bitmap bmp;
static Socket clientSocket;
static OutputStream os;
static ObjectInputStream entrada;
@TargetApi(Build.VERSION_CODES.GINGERBREAD)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
boton = (Button)findViewById(R.id.button1);
boton.setOnClickListener(event);
imagenVista = (ImageView)findViewById(R.id.imageView1);
if (android.os.Build.VERSION.SDK_INT > 9) {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
}
//boton.performClick();
}
private OnClickListener event = new OnClickListener() {
@TargetApi(Build.VERSION_CODES.GINGERBREAD)
@Override
public void onClick(View v) {
if (boton.getText().equals("Start")){
boton.setText("Stop");
try{
Toast.makeText(getApplicationContext(), "Pulsado", Toast.LENGTH_SHORT).show();
int cont = 0;
while(cont < 9) {
System.out.println("Creando socket cliente");
Socket clientSocket= new Socket();
System.out.println("Estableciendo la conexión");
InetSocketAddress addr=new InetSocketAddress("10.209.0.93", 5555);
clientSocket.connect(addr);
entrada = new ObjectInputStream(clientSocket.getInputStream());
final byte[] bytes_img;
bytes_img = (byte[]) entrada.readObject();
new Thread(new Runnable() {
@Override
public void run() {
final Bitmap bmp = BitmapFactory.decodeByteArray(bytes_img, 0, bytes_img.length);
imagenVista.post(new Runnable() {
//runOnUiThread(new Runnable() {
@Override
public void run() {
imagenVista.setImageBitmap(bmp);
imagenVista.invalidate();
}
});
}
}).start();
entrada.close();
clientSocket.close();
cont++;
}
}catch(Exception e){
e.printStackTrace();
}
}
else{
boton.setText("Start");
}
}
};
}
Servidor
Código [Seleccionar]
public class Servidor implements Runnable, Serializable{
private static final long serialVersionUID = 8760160157002886283L;
static Socket newSocket;
static String msg;
static Boolean recibir = true;
static ServerSocket serverSocket;
public static void main(String args[]) throws IOException {
//serverSocket= new ServerSocket(5555);
char c = 20;
try{
System.out.println("\n" + InetAddress.getLocalHost().getHostName());
while(true){
serverSocket= new ServerSocket(5555);
System.out.println("Acepta conexiones");
newSocket= serverSocket.accept();
recibir = true;
Thread t1 = new Thread(new Servidor());
t1.start();
t1.join();
}
}catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
@Override
public void run() {
InputStream is;
OutputStream os;
System.out.println("Conexión recibida desde IP: " + newSocket.getInetAddress());
System.out.println("Nombre: " + Thread.currentThread().getName());
try{
ObjectOutputStream salida = new ObjectOutputStream(newSocket.getOutputStream());
salida.flush();
Rectangle dimension_pantalla = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize());
Robot robot = new Robot();
BufferedImage imgBuffer = robot.createScreenCapture(dimension_pantalla);
ByteArrayOutputStream salida_img = new ByteArrayOutputStream();
ImageIO.write(imgBuffer, "jpg", salida_img);
byte[] img_en_bytes = salida_img.toByteArray();
salida.writeObject(img_en_bytes);
salida.flush();
imgBuffer.flush();
salida.close();
newSocket.close();
serverSocket.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
(Si veis cosas que sobran es por las diversas pruebas que he ido haciendo con ambas clases )
Se trata de parte de mi proyecto de fin de curso, por lo que agradezco cualquier informacion que me sirva y estare eternamente agradecido a todo aquel que pueda ayudarme. Gracias! (Una vez lo termine subire el codigo)