2013-02-16 72 views
1

我是Java新手,所以我需要幫助。我正在編寫一個應用程序,將onClick發送一個字符串到服務器和服務器需要返回一個圖像使用套接字。所以我的客戶端是Android,服務器端是PC-java。 我認爲我的服務器端是好的(因爲他打印出所有的system.out.print命令),但我的客戶端不好。請告訴我我的錯誤在哪裏?謝謝!通過套接字發送圖片(Java PC - Android)

這裏是我的服務器(PC)端(插座交付直通功能參數)的代碼:

try { 
     dataInputStream = new DataInputStream(socket.getInputStream()); 
     poruka = "" + dataInputStream.readUTF(); 
     System.out.print(poruka); 

     int bytecount = 2048; 
     byte[] buf = new byte[bytecount]; 

     OutputStream OUT = socket.getOutputStream(); 
     BufferedOutputStream BuffOUT = new BufferedOutputStream(OUT, bytecount); 
     FileInputStream in = new FileInputStream("screenShot.jpg"); 

     int i = 0; 
     while ((i = in.read(buf, 0, bytecount)) != -1) { 
      BuffOUT.write(buf, 0, i); 
      System.out.print("check" + buf[0]); 
      BuffOUT.flush(); 
     } 


     in.close(); 
     BuffOUT.close(); 
     System.out.print("over"); 

    } catch (IOException e) { 
     e.printStackTrace(); 
    }finally{ 
     try { 
      socket.close(); 
      dataInputStream.close(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 

,這裏是我的客戶端(安卓)側:

  Socket socket = null; 
      DataOutputStream dataOutputStream = null; 

      try { 
       socket = new Socket(IPadresa, 8888); 
       dataOutputStream = new DataOutputStream(socket.getOutputStream()); 
       slanje = "hy string"; 
       dataOutputStream.writeUTF(slanje); 

       FileOutputStream outToFile = new FileOutputStream("slika.jpg"); 

       int bytecount = 2048; 
       byte[] buf = new byte[bytecount]; 


       InputStream IN = socket.getInputStream(); 
       BufferedInputStream BuffIN = new BufferedInputStream(IN, bytecount) 

       int i = 0; 
       int filelength = 0;  
       while((i = BuffIN.read(buf, 0, bytecount)) != -1) { 
        filelength += i; 
        outToFile.write(buf, 0, i); 
        outToFile.flush(); 
       } 


       IN.close(); 
       BuffIN.close(); 




       dataOutputStream.close(); 
       socket.close(); 

      } catch (UnknownHostException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 

更多的信息: 在服務器端,我可以看到從客戶端發送的字符串。我有這個System.out.print(「over」);命令打印每次我發送字符串到服務器。另外我有System.out.print(「check」+ buf [0]);從服務器打印出來很多次。所以這就是爲什麼我認爲客戶端有問題。

而我的客戶端不會拋出任何異常......但我注意到客戶端從未通過while循環。它卡在那裏。

+0

請告訴我們是什麼讓你覺得客戶端存在問題。怎麼了?任何例外?客戶端和服務器端的輸出是什麼? – 2013-02-16 23:17:59

+0

我編輯了我的問題,以便您可以閱讀是什麼讓我覺得客戶端存在問題。感謝您的幫助! – jpetrucci 2013-02-17 00:00:13

回答

0

我不知道你的意思是「我的客戶端是不是好」,我看不到任何明顯的錯誤,將停止其完全工作。如果你能告訴我們發生了什麼,那會有幫助。

同時有幾件事情錯的代碼,你已經提出:

  1. 您違反了業界公認的編碼與名稱,如「BuffIn」,「IN」,「IPaddresa」等標準上。 Java中的所有變量名稱必須以小寫字母開頭。

    如果你在私人代碼中這是你的業務。但是如果你打算向其他人展示你的Java代碼,你應該遵守標準。 (和SO發佈您的代碼然後顯示給其他人...)

  2. 既然你總是試圖讀取數據的整個緩衝區的價值,與in.read(buf)更換in.read(buf, 0, bytecount)

  3. 有在使用BufferedInputStreamBufferedOutputStream如果你只打算做就可以了readwrite電話沒有價值。如果您告訴流使用與您正在讀/寫的byte[]相同大小的緩衝區,則更是如此。

  4. 您的客戶端和服務器端代碼都可能泄漏文件描述符。在服務器端,它可能會泄漏in。在客戶端,任何或所有流的文件描述符都可能泄漏。

+0

我編輯了我的問題,以便您可以閱讀是什麼讓我覺得客戶端存在問題。感謝您的幫助! – jpetrucci 2013-02-17 00:02:41