Autore Topic: Problema ricezione file sul server tramite socket  (Letto 943 volte)

Offline Albe85

  • Utente junior
  • **
  • Post: 102
  • Respect: +1
    • Mostra profilo
Problema ricezione file sul server tramite socket
« il: 08 Dicembre 2010, 16:07:44 CET »
0
Buongiorno.
Ho un problema durante il trasferimento di un file presente sulla sd del mio dispositivo android dal dispositivo stesso al mio server (il mio pc) tramite comunicazione socket.

Quello che faccio lato server è la seguente cosa:
Codice (Java): [Seleziona]
private final String SAVE_DIR = "C:/Users/Alberto/Documents";
  private final int SERVER_PORT = 4444;
ServerSocket ss = new ServerSocket(SERVER_PORT);
      System.out.println("Sono sulla " + ss);
 
      // ciclo infinito per accettare per sempre connessioni
      for (;;) {
          // prendo la connessione in ingresso
          Socket s = ss.accept();
          System.out.println("Conessione da " + s);
         

          try {
                 
          BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
          String str = in.readLine();

if("TI INVIO LE QUANTITA COMPERATE".equals(str)){
                 System.out.println("S: CLIENT DICE: '" + str + "'");
                   //RICEZIONE NELLA CARTELLA DI LAVORO DEL FILE QUANTITATOSERVER.xml DAL
                   //DISPOSITIVO MOBILE

                 ObjectInputStream oin = new ObjectInputStream(s.getInputStream());
                 File inFile = (File) oin.readObject();
                 File saveFile = new File(SAVE_DIR + "/" + inFile.getName());
                 FileInputStream fis  = new FileInputStream(inFile);
                 FileOutputStream fos = new FileOutputStream(saveFile);
                 byte[] buf = new byte[1024];
                 int i = 0;
                 // riga per riga leggo il file originale per
                 // scriverlo nello stram del file destinazione
                 while((i=fis.read(buf))!=-1) {
                     fos.write(buf, 0, i);
                 }
                 // chiudo gli strams
                 fis.close();
                 fos.close();
           
                 System.out.println(" --ricezione completata");
                 
                 
             }//Fine IF TI INVIO LE QUANTITA COMPERATE

Lato android invece lancio un thread all'istante che mi serve per inviare il file al dispositivo:
Codice (Java): [Seleziona]
public class TCPClientQuantita implements Runnable {

        private final String SERVER_HOST = "192.168.0.107";
        private final int SERVER_PORT = 4444;
       
       
    public void run() {
         try {

                     try {
                         
                         Socket socket = null;
                         socket = new Socket(SERVER_HOST, SERVER_PORT);
                         String message = "TI INVIO LE QUANTITA COMPERATE";
                         PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true);
                          out.println(message);
                         
                         File sdcardDir = Environment.getExternalStorageDirectory();
                         
                         File myFile = new File(sdcardDir,"QUANTITATOSERVER.xml");
                         ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
                         oos.reset();
                         oos.writeObject(myFile);
                         oos.flush();
                         oos.close();

                     Log.d("TCP", "C: Sent.");
                     Log.d("TCP", "C: Done. DATI INVIATI!");
                     
                     
                     
                     
             } catch(Exception e) {
                 Log.e("TCP", "S: Error", e);
                      }
         } catch (Exception e) {
              Log.e("TCP", "C: Error", e);
         }
         
         
    }//chiusura metodo run


L'eccezione che mi capita è la seguente:

java.io.FileNotFoundException: \mnt\sdcard\QUANTITATOSERVER.xml (Impossibile trovare il percorso specificato)
   at java.io.FileInputStream.open(Native Method)
   at java.io.FileInputStream.<init>(Unknown Source)
   at Server.listen(Server.java:131)
   at Server.main(Server.java:44)

dove
at Server.listen(Server.java:131)  -------------> FileInputStream fis  = new FileInputStream(inFile);

Il file è presente correttamente sulla sd.
Non capisco il perchè mi generi questa eccezione.
E' una giornata intera che ci sto sclerando sopra ma proprio non ne vengo fuori.
Vi ringrazio ciao

« Ultima modifica: 08 Dicembre 2010, 16:09:41 CET da Albe85 »