当前位置: 首页 > 知识库问答 >
问题:

android Apache httpclient上载文件,。出现一些奇怪的TCP重新组装错误

柳刚豪
2023-03-14

我使用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[确认字符]Seq=676 Ack=1 Win=14656 Len=1448 TSval=161633 TSecr=516688742[重组错误,协议TCP:新片段重叠旧数据(重传?)]

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

共有1个答案

劳夕
2023-03-14

这是TCP完全可以接受的行为。丢失的返回确认字符将导致实际接收到的数据的重传,可能大于原始数据,并包括稍后的数据。接收者将静默地丢弃它已经接收到的数据的其他副本。

 类似资料:
  • 所以在离开我的Android Studio项目一段时间后,我运行了所有的更新。

  • 问题内容: 我一般对Python和编程都不熟悉,所以如果我遗漏了一些明显的东西,请提前道歉。我正在尝试绘制图形并标记轴,但是每次尝试标记y轴时都会引发异常。我在下面的新脚本中编写了代码,以确保问题不是来自模块中的其他地方。我正在使用Python 3.4。 每次,我在最后一行收到错误“ TypeError:’str’对象不可调用”。如果我将y更改为x,一切都很好。如果将x更改为ay,则会收到相同的错

  • -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

  • 我最近开始了我的第一个libGDX游戏,一切都进行得很好,所有的东西都呈现得很好,但是大约一分钟后什么都没有呈现,呈现调用仍然被发出,并且spritebatch工作得很好,我只是留下了一个黑屏,我甚至把'gl clearcolor()'改成了但我仍然留下了一个黑屏。我不知道这会是什么。 我的主要类: 编辑:我们已经确定,经过一段时间SpriteBatch渲染一个黑色屏幕的红色清晰颜色,它也停止渲染

  • 所以我在做这个素数家庭作业,举了一个很好的例子,我想我已经把大部分都记下来了。我遇到的一件事是“公共静态空隙筛(int n)”一行的错误,这也发生在“私有静态int twinPrime()”中 代码如下: 以下是错误: void是变量筛的无效类型 预期令牌 "(", ; 语法错误 令牌 “)” 上的语法错误, ;预期 和 标记“int”语法错误,应为@ 语法错误,请插入“EnumBody”以完成B

  • 问题内容: 如果通过tomcat 7上的netbeans重新部署该项目,那么我会收到类似以下错误 今天,当我们尝试在tomcat 7上重新部署项目时,又遇到了另一个奇怪的错误 从现在开始已经出现了如此奇怪的错误。当我们尝试调试时,我们发现已经存在的类。 我能想到的是悬空的c3p0连接池线程,它们要么在重新部署时未正确销毁,要么可能正在执行一些活动连接或类似的操作。 关于如何重新部署这样使用hibe