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

Reply via email to