我正在使用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错误?
答案 0 :(得分:0)
这是TCP完全可以接受的行为。丢失的返回ACK
将导致实际接收的数据的重传,可能大于原始数据,也包括后来的数据。接收方将默默地丢弃已收到的其他数据副本。