2013-03-22 74 views
0

我想製作一個java服務器,將圖像存儲在數據庫中的Android設備。java tcp服務器到android設備

現在我試圖用簡單的圖像存儲在硬盤上供服務器發送。

我的問題是我可以通過TCP套接字發送圖像從java服務器作爲字節數組到android。

回答

1

是的,你可以使用TCP套接字。

以字節讀取文件並以字節形式發送,不要嘗試將其加載爲BufferedImage。

然後,在接收端,使用允許您從字節數組中加載圖像的函數。

+0

我試圖讀取服務器端的圖像作爲緩衝圖像,然後將其轉換爲字節數組併發送。我不知道如何在Android客戶端接收它並將其顯示在ImageView上。 – 2013-03-22 17:49:01

+0

查看更新。雖然我不熟悉android API。 – Joni 2013-03-22 17:56:28

0

當然,你可以,但你需要爲此創造你自己的協議。您可能會發現使用HTTP多,無論是建立一個網絡服務器如Tomcat與應用程序部署在那裏,或使用嵌入類似碼頭的東西

0
The fastest and easiest approach for sending image is as follows... 
Try this  
// Server Side code for image sending 

     ServerSocket servsock = new ServerSocket(13250); 
     System.out.println("Main Waiting..."); 
     Socket sock = servsock.accept(); 
     System.out.println("Accepted connection : " + sock); 

     File myFile = new File ("\sdcard\ab.jpg"); 
     byte [] mybytearray = new byte [(int)myFile.length()]; 
     FileInputStream fis = new FileInputStream(myFile); 
     BufferedInputStream bis = new BufferedInputStream(fis); 
     bis.read(mybytearray,0,mybytearray.length);*/ 

     byte [] mybytearray =new byte[count]; 
     System.arraycopy(Copy, 0, mybytearray, 0, count); 
     OutputStream os = sock.getOutputStream(); 
     System.out.println("Sending..."); 
     os.write(mybytearray,0,mybytearray.length); 
     os.flush(); 
     os.close(); 
     sock.close(); 
     servsock.close(); 

//Client side code for image reception 

try 
{ 
    int filesize=6022386; // filesize temporary hardcoded 
    long start = System.currentTimeMillis(); 
    int bytesRead; 
    int current = 0; 
    // localhost for testing 
    ServerSocket servsocket = new ServerSocket(13267); 
    System.out.println("Thread Waiting..."); 
    Socket socket = servsocket.accept(); 
    System.out.println("Accepted connection : " + socket); 
    System.out.println("Connecting..."); 
    File f=new File("\sdcard\ab.jpg"); 
    f.createNewFile(); 
    // receive file 
    byte [] mybytearray = new byte [filesize]; 
    InputStream is = socket.getInputStream(); 
    FileOutputStream fos = new FileOutputStream(f); 
    BufferedOutputStream bos = new BufferedOutputStream(fos); 
    bytesRead = is.read(mybytearray,0,mybytearray.length); 
    current = bytesRead; 
    do { 
     bytesRead = 
     is.read(mybytearray, current, (mybytearray.length-current)); 
     if(bytesRead >= 0) current += bytesRead; 
    } while(bytesRead > -1); 
    count=current; 
    Copy=mybytearray.clone(); 
    bos.write(mybytearray, 0 , current); 
    bos.flush(); 
    long end = System.currentTimeMillis(); 
    System.out.println(end-start); 
    bos.close(); 
    fos.close(); 
    socket.close(); 
    servsocket.close(); 
} 
} catch(IOException e) 
{ 
    System.out.println("errorr"); 
} 
+0

是完整的代碼,因爲它給了我很多錯誤 – 2013-03-22 18:23:13

+0

錯誤:mybytearray在服務器代碼中聲明瞭兩次。有一個無與倫比的* /。 – greenapps 2013-03-22 20:31:03