2013-10-10 24 views
0

如果我想從服務器複製數據庫文件,運行以下代碼,我需要在我的服務器上啓用/打開哪些服務/端口?我希望儘可能少地開放必要的服務。從服務器下載數據庫到Android設備時需要打開哪些服務?

下載數據庫的方法

private static boolean downloadDatabase(Context context) { 
       try { 
         // Log.d(TAG, "downloading database"); 
         URL url = new URL("http://some-url.com/db/" + "db_name.s3db"); 
         /* Open a connection to that URL. */ 
         URLConnection ucon = url.openConnection(); 
         /* 
         * Define InputStreams to read from the URLConnection. 
         */ 
         InputStream is = ucon.getInputStream(); 
         BufferedInputStream bis = new BufferedInputStream(is); 
         /* 
         * Read bytes to the Buffer until there is nothing more to read(-1). 
         */ 
         ByteArrayBuffer baf = new ByteArrayBuffer(50); 
         int current = 0; 
         while ((current = bis.read()) != -1) { 
           baf.append((byte) current); 
         } 

         /* Convert the Bytes read to a String. */ 
         FileOutputStream fos = null; 
         // Select storage location 
         fos = context.openFileOutput("db_name.s3db", Context.MODE_PRIVATE); 

         fos.write(baf.toByteArray()); 
         fos.close(); 
         // Log.d(TAG, "downloaded"); 
       } catch (IOException e) { 
         Log.e(TAG, "downloadDatabase Error: " , e); 
         return false; 
       } catch (NullPointerException e) { 
         Log.e(TAG, "downloadDatabase Error: " , e); 
         return false; 
       } catch (Exception e){ 
         Log.e(TAG, "downloadDatabase Error: " , e); 
         return false; 
       } 
       return true; 
     } 

複製數據庫的方法

/** 
    * Copies your database from your local downloaded database that is copied from the server 
    * into the just created empty database in the 
    * system folder, from where it can be accessed and handled. 
    * This is done by transfering bytestream. 
    * */ 
     private void copyServerDatabase() { 
      // by calling this line an empty database will be created into the default system path 
      // of this app - we will then overwrite this with the database from the server 
      SQLiteDatabase db = getReadableDatabase(); 
      db.close(); 


       OutputStream os = null; 
       InputStream is = null; 
       try { 
         // Log.d(TAG, "Copying DB from server version into app"); 
         is = mContext.openFileInput("db_name.s3db"); 
         os = new FileOutputStream("/data/data/your.package.name/databases/"); // XXX change this 

         copyFile(os, is); 
       } catch (Exception e) { 
         Log.e(TAG, "Server Database was not found - did it download correctly?", e);       
       } finally { 
         try { 
           //Close the streams 
           if(os != null){ 
             os.close(); 
           } 
           if(is != null){ 
             is.close(); 
           } 
         } catch (IOException e) { 
           Log.e(TAG, "failed to close databases"); 
         } 
       } 
        // Log.d(TAG, "Done Copying DB from server"); 
     } 




    private void copyFile(OutputStream os, InputStream is) throws IOException { 
      byte[] buffer = new byte[1024]; 
      int length; 
      while((length = is.read(buffer))>0){ 
        os.write(buffer, 0, length); 
      } 
      os.flush(); 
    } 

回答

0

用於HTTP的默認端口是80,如果你指定一個端口的一部分,您可能需要另一個端口開放這個例子中的URL如http://some-url.com:8080/db/

相關問題