Autore Topic: Scambio di dati tra due dispositivi utilizzando Socket tcp  (Letto 337 volte)

Offline t0re199

  • Nuovo arrivato
  • *
  • Post: 8
  • Respect: 0
    • t0redev
    • Mostra profilo
  • Dispositivo Android:
    Asus ZenFone 2
  • Sistema operativo:
    Mac Os X 10.10.1 , Windows 8.1 update 2
Scambio di dati tra due dispositivi utilizzando Socket tcp
« il: 17 Aprile 2016, 19:45:23 CEST »
0
Ciao A tutti ragazzi, sto sviluppando un applicazione android che deve andare a "prendere" dei dati da un'altra app per pc scritta ovviamente in java, e restituirli quando richiesto.
Ho implementato il codice, ma non so per quale motivo il tutto funziona solo la prima volta! Per meglio dire, se avviando l'app utilizzo la funzione per ricevere i dati, dopo averli ricevuti, questa non riesce ad inviarli (la cosa strana è che non mi genera nessuna eccezione o altro!!)
Spero di essere stato chiaro per ricapitolare sia l'app che che il pc devo fungere contemporaneamente sia da client che da server.
Allego il codice della parte "rete". Grazie a tutti ragazzi spero che riusciate a darmi una mano

Codice (Java): [Seleziona]
private static boolean getServerStatus()
    {
        return serverStatus;
    }

    public class BackgroundSPNetTask extends AsyncTask
    {

        @Override
        protected Object doInBackground(Object... obj)
        {
            Server server = new Server();
            try
            {
                server.listen();
            }
            catch (Throwable throwable)
            {
                throwable.printStackTrace();
            }
            return null;
        }
    }

    public class ServerReceiverManager implements Runnable
    {
        public Socket socket;
        public Context context;

        public ServerReceiverManager(Socket socket,Context context)
        {
            this.socket = socket;
            this.context = context;
        }

        public void run()
        {
            try
            {
                //System.out.println("Richiesta da: " + socket);
                String s = socket.getRemoteSocketAddress().toString();
                s = "Client IP: "+s.substring(1,s.indexOf(':'));
                s = s+"\n\nClient Port: 2905";
                final String output = s;
                ObjectInputStream inputStream = new ObjectInputStream(socket.getInputStream());
                final String pwd = (String) inputStream.readObject();
                //System.out.println("Comando Ricevuto: "+pwd);
                MainActivity.this.runOnUiThread(new Runnable()
                {
                    public void run()
                    {
                        addOutput("Client IP: "+output+"\n\n"+"Password Lenght: "+pwd.length());
                        onPasswordReceived(pwd);
                    }
                });
                stopServer();
            }
            catch(Throwable exc){exc.printStackTrace();}
        }

        public void stopServer()
        {
            try
            {
                socket.close();
            } catch (IOException e)
            {
                e.printStackTrace();
            }
        }
    }


    public class Server
    {
        private ServerSocket serverSocket;
        private final int serverPort = 2905;

        public  void listen() throws Throwable
        {
            runOnUiThread(new Runnable()
            {
                @Override
                public void run()
                {
                    onServerConnected();
                }
            });
            serverSocket = new ServerSocket(serverPort);
            while(MainActivity.getServerStatus())
            {
                Socket inputConnection = serverSocket.accept();
                new ServerReceiverManager(inputConnection,MainActivity.context).run();
                try
                {
                    Thread.sleep(150);
                }
                catch (Exception exc)
                {
                    exc.printStackTrace();
                }
            }
            serverSocket.close();
        }

    }

    public class BackgroundSPNetTransfer extends AsyncTask
    {
        public Object obj;

        public BackgroundSPNetTransfer(Object obj)
        {
            this.obj = obj;
        }

        @Override
        protected Object doInBackground(Object... obj)
        {
            try
            {
                sendObjectOverSocket();
            } catch (Throwable throwable)
            {
                throwable.printStackTrace();
            }
            return null;
        }

        private  void sendObjectOverSocket() throws Throwable
        {
            Socket socket = null;
            try
            {
                socket = new Socket(serverIpAddress,serverPort);
            }
            catch(UnknownHostException uhe){uhe.printStackTrace();System.out.println("UNKNOWN HOST");}
            catch(IOException IOE){IOE.printStackTrace();System.out.println("ERROR");}
            ObjectOutputStream objectOutputStream = new ObjectOutputStream(socket.getOutputStream());
            objectOutputStream.reset();
            objectOutputStream.writeObject(obj);
            objectOutputStream.flush();
            objectOutputStream.close();
        }
    }