2012-03-26 4 views
1
senden

Ich muss einige Byte-Array von Android-Gerät zu Servlet senden. Dazu versuche ich nächsten Code zu verwenden:Wie Byte-Array von Android-Gerät an Servlet

Servlets:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws 
ServletException, IOException { 

    DataInputStream in = new DataInputStream((InputStream)request.getInputStream()); 
    response.setContentType("text/plain"); 
    byte[] buffer = new byte[1024]; 
    int len = 0; 
    File file; 
    file=new File(getServletContext().getRealPath("/POST_LOG!!!!.txt")); 
    if(!file.exists()){ 
     file.createNewFile(); 
    } 
    while ((len = in.read(buffer)) > 0) { 
      FileOutputStream fos = new FileOutputStream(getServletContext().getRealPath("/POST_LOG!!!!.txt"), true); 

      fos.write(buffer);    
      fos.close(); 
    } 

    PrintWriter out = response.getWriter(); 
    out.write("Done"); 
    out.close(); 

Geräteseite:

URL uploadUrl; 
    try { 
     uploadUrl = new URL(url); 
     HttpURLConnection c = (HttpURLConnection) uploadUrl 
       .openConnection(); 
     c.setRequestMethod("POST"); 

     c.setDoInput(true); 
     c.setDoOutput(true); 
     c.setUseCaches(false); 
     c.connect(); 
     OutputStream out = c.getOutputStream(); 

     for (int i = 0; i < 1000; i++) { // generate random bytes for 
              // uploading 
      byte[] buffer = new byte[256]; 
      for (int j = 0; j < 256; j++) { 
       Random r = new Random(); 
       buffer[j] = (byte) r.nextInt(); 
      } 

      out.write(buffer); 
      out.flush(); 
     } 

     out.close(); 

    } catch (Exception e) { 
     MessageBox("Error. " + e.toString()); 
    } 

    return (long) 0; 
} 

Ich verstehe nicht, warum Sie diesen Code nicht funktioniert. Wenn ich versuche, meine POST-Methode zu debuggen, wird sie sogar nicht aufgerufen. Ich werde dankbar für Ihre Beispiele

+0

Bitte teilen Sie Ihre web.xml Eintrag von Servlet-Konfiguration, URL-Mapping und servletn URL Sie es aufzurufen verwenden. – Santosh

Antwort

2

ich die Lösung gefunden. Ich habe gerade meinen geräteseitigen Code mithilfe von benutzerdefiniertem InputStream geändert.

Geräteseite:

HttpPost httpPost = new HttpPost(url); 
    httpPost.setEntity(new InputStreamEntity(new MyInputStream(), 
      4096 * 1024 * 10)); 
    HttpResponse response = null; 

    try { 
     response = httpClient.execute(httpPost); 
    } catch (ClientProtocolException e) { 
     e.printStackTrace(); 
     httpPost.abort(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
     httpPost.abort(); 
    } 
0

Sie haben viele Möglichkeiten:

  • die Byte-Werte senden: 125,11,25,40 (das ist eine dumme Option)
  • senden es base64 oder hex - codiert und dann entschlüsseln (verwenden sie apache commons-codec)
  • eintragen als multipart/form-data