android Apache httpclient上传文件,得到了一些奇怪的TCP重组错误

时间:2014-12-30 01:01:53

标签: java android apache tcp

我正在使用Apache httpclient和multipart请求将图像文件上传到服务器。 我能够通过其他客户端(如iphone和fiddler)成功上传文件,以便在服务器端调用相同的api调用。 Android没那么幸运......

    HttpClient client = new DefaultHttpClient();
        HttpPost post = new HttpPost(appController.getInstance().getURL().concat("/Api/ApiSales/UploadImages"));
        post.addHeader("Authorization", appController.getInstance().getAuthTokenString());
    MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE)
File fileDir = new File( Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), Global.PHOTO_DIR);
        for (File file : fileDir.listFiles()){
            if (file.getName().equals("campusMarketLogo.png")){
                Log.i("", "found campus logo file!");
                FileInputStream fin = null;
                try {
                    fin = new FileInputStream(file);
                } catch (FileNotFoundException e) {
                    Log.e("", e.getLocalizedMessage());
                }
byte[] fileContent = new byte[(int)file.length()];
                try {
                    fin.read(fileContent);
                } catch (IOException e) {
                    Log.e("", e.getLocalizedMessage());
                }
ByteArrayBody bab = new ByteArrayBody(fileContent,"image/png",file.getName());
                entity.addPart("File", bab);
            }
        }
        post.setEntity(entity);
        try {
            client.execute(post, new uploadResponseHandler());
        } catch (IOException e) {
            Log.e("something is wrong", e.getLocalizedMessage());
        }    

当我从Wireshark读取我的日志时,我看到了一些TCP错误:

  

[TCP重传] 62941→80 [ACK] Seq = 676 Ack = 1 Win = 14656 Len = 1448 TSval = 161633 TSecr = 516688742 [重组错误,协议TCP:新片段重叠旧数据(重传?)]

为什么会出现这样的TCP错误?

1 个答案:

答案 0 :(得分:0)

这是TCP完全可以接受的行为。丢失的返回ACK将导致实际接收的数据的重传,可能大于原始数据,也包括后来的数据。接收方将默默地丢弃已收到的其他数据副本。