//上传文件内容结束标志
mOutputStream.write(LINEND.getBytes());
// 请求结束标志 
byte[] end_data = (PREFIX + BOUNDARY + PREFIX + LINEND).getBytes();
mOutputStream.write(end_data);
mOutputStream.flush();
// 得到响应码
int res = mUrlConn.getResponseCode();上传文件的部分代码如上。
通过抓包发现,实际上mOutputStream.write();函数并没有真正的把文件内容通过socket发送到服务器上,
只有mUrlConn.getResponseCode();函数调用时,才真正通过socket发送了数据到服务器上。但这个函数是
阻塞模式,如果用户取消上传,该如何处理?如果强杀线程,立即终止,该调用哪个函数?

解决方案 »

  1.   

    mOutputStream.write()并没有向服务器发送数据,只是把数据存入一个缓冲区!
    可以调用下httpUrlConnection.disconnect()应该可以断开连接
      

  2.   

    通过抓包发现,一旦调用mUrlConn.getResponseCode()接口,就算线程退出了,在后台系统仍然在跑。通过抓包工具可以很清楚的看到,直到这个文件上传完毕。
      

  3.   

    大家可以做个试验。。弄一个线程调用mUrlConn.getResponseCode()接口后,再另一个线程disconnect。然后用wireshark抓包工具查看,会发现实际上后台仍然在传输文件数据,只是用户并不知道而已。