As you can see from the sniffed packets, the problem is not in establishing network connection, but on a higher level: HTTP multipart file upload using Apache HttpClient from Android SDK & Apache Commons File Upload.
Radek On 12/24/2009 11:11 PM, jotobjects wrote: > Apparently your HTC is able to connect over WIFI to your router and > find a local network laptop running the servlet. > > Have you tried having the emulator running on the laptop connect to > localhost using port 10.0.2.2? That could at least establish that the > code works (or not) in that situation. See this link: > > http://developer.android.com/intl/zh-CN/resources/faq/commontasks.html#localhostalias > > On Dec 23, 10:38 pm, Radek Skokan<[email protected]> wrote: > >> I tried it on both the emulator and a physical device (HTC Hero). Same >> behavior. >> 192.168.1.100 is my laptop running Tomcat. There is a servlet with >> Apache Commons File upload waiting for that multipart file. Works >> correctly with uploads from a browser (PC& Android). >> >> Thanks, >> R. >> >> On 12/23/2009 10:56 PM, jotobjects wrote: >> >> >>> Are you running this on the emulator? >>> >> >>> Is 192.168.1.100 a different computer on the same router? >>> >> >>> On Dec 22, 4:51 am, Radek Skokan<[email protected]> wrote: >>> >> >>>> Hi, >>>> >> >>>> I'm trying to upload a file from Android to Tomcat server using >>>> HttpClient and HttpPost. The android-side code is: >>>> >> >>>> HttpClient client = new DefaultHttpClient(); >>>> >>>> client.getParams().setParameter("http.socket.timeout", new Integer >>>> (90000)); // 90 second >>>> HttpPost httpPost = new >>>> HttpPost("http://192.168.1.100:8080/ >>>> mediator/upload"); >>>> FileEntity entity = new FileEntity(new >>>> File(filePath), "binary/ >>>> octet-stream"); >>>> httpPost.setEntity(entity); >>>> HttpResponse response = client.execute(httpPost); >>>> Log.i(TAG, "Upload finished. Status: " + >>>> response.getStatusLine()); >>>> client.getConnectionManager().shutdown(); >>>> >> >>>> The result always is "HTTP/1.1 400 Bad Request". >>>> >> >>>> I captured the data sent over the network and it looks like: >>>> >> >>>>> POST /mediator/upload HTTP/1.1 >>>>> Content-Length: 8287 >>>>> Content-Type: binary/octet-stream >>>>> Host: 192.168.1.100:8080 >>>>> Connection: Keep-Alive >>>>> User-Agent: Apache-HttpClient/UNAVAILABLE (java 1.4) >>>>> Expect: 100-Continue >>>>> >> >>>> < HTTP/1.1 100 Continue >>>> >> >>>> < HTTP/1.1 400 Bad Request >>>> < Server: Apache-Coyote/1.1 >>>> < Content-Type: text/html;charset=UTF-8 >>>> < Content-Length: 971 >>>> < Date: Tue, 22 Dec 2009 12:14:47 GMT >>>> < Connection: close >>>> >> >>>> I created a simple HTML form for POSTing a file. This works fine from >>>> browser and the data is different: >>>> 1) it doesn't use HTTP 100 continue >>>> 2) Content-Type: multipart/form-data; boundary=---- >>>> WebKitFormBoundaryDlIVGYpQG46Q46So >>>> >> >>>> In my client I tried to change the content type to other values than >>>> "binary/octet-stream", but when I sniff the traffic, the binary/octet- >>>> stream is still there. >>>> >> >>>> I do this on HTC Here/SDK 1.5. >>>> >> >>>> Thanks, >>>> Radek >>>> >> >>>> On Nov 15, 11:46 am, rezar<[email protected]> wrote: >>>> >> >>>>> I solved the problem. I post my code here for others to have a working >>>>> sample: >>>>> on the server side I made a simple servlet: >>>>> ------------------------------------------------------------------------------------------------------------------------------------------------------------------ >>>>> private void receiveFile(HttpServletRequest req, HttpServletResponse >>>>> resp) throws Exception { >>>>> Enumeration emns = req.getHeaderNames(); >>>>> InputStream is = req.getInputStream(); >>>>> OutputStream os = new >>>>> FileOutputStream(req.getHeader(FILENAME_STR)); >>>>> byte[] buffer = new byte[4096]; >>>>> int bytesRead; >>>>> while ((bytesRead = is.read(buffer)) != -1) { >>>>> os.write(buffer, 0, bytesRead); >>>>> } >>>>> is.close(); >>>>> os.close(); >>>>> } >>>>> protected void doPost(HttpServletRequest request,HttpServletResponse >>>>> response) throws ServletException, IOException { >>>>> try { >>>>> receiveFile(request,response); >>>>> } catch (Exception e) { >>>>> >>>>> System.err.println("------------ERROR---------"+e.getMessage()); >>>>> e.printStackTrace(); >>>>> } >>>>> } >>>>> ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ >>>>> At the android side (SDK v.2.0 ): >>>>> private HttpPost post; >>>>> public void doUpload(String filepath,String filename) { >>>>> HttpClient httpClient = new DefaultHttpClient(); >>>>> try { >>>>> >>>>> httpClient.getParams().setParameter("http.socket.timeout", new >>>>> Integer(90000)); // 90 second >>>>> post = new HttpPost(new >>>>> URI(YOUR_SERVER_ADDRESS)); >>>>> File file = new File(filepath); >>>>> FileEntity entity; >>>>> if (filepath.substring(filepath.length()-3, >>>>> filepath.length >>>>> ()).equalsIgnoreCase("txt") || >>>>> filepath.substring(filepath.length()-3, >>>>> filepath.length >>>>> ()).equalsIgnoreCase("log")) { >>>>> entity = new >>>>> FileEntity(file,"text/plain; charset=\"UTF-8\""); >>>>> entity.setChunked(true); >>>>> }else { >>>>> entity = new >>>>> FileEntity(file,"binary/octet-stream"); >>>>> entity.setChunked(true); >>>>> } >>>>> post.setEntity(entity); >>>>> post.addHeader(FILENAME_STR, filename); >>>>> >> >>>>> HttpResponse response = >>>>> httpClient.execute(post); >>>>> if (response.getStatusLine().getStatusCode() != >>>>> HttpStatus.SC_OK) { >>>>> >>>>> Log.e(TAG,"--------Error--------Response Status line >>>>> code:"+response.getStatusLine()); >>>>> }else { >>>>> // Here every thing is fine. >>>>> } >>>>> HttpEntity resEntity = response.getEntity(); >>>>> if (resEntity == null) { >>>>> Log.e(TAG,"---------Error No Response >>>>> !!!-----"); >>>>> } >>>>> } catch (Exception ex) { >>>>> >>>>> Log.e(TAG,"---------Error-----"+ex.getMessage()); >>>>> ex.printStackTrace(); >>>>> } finally { >>>>> httpClient.getConnectionManager().shutdown(); >>>>> } >>>>> } >>>>> > -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/android-developers?hl=en

