Android客户端使用Socket发送大文件,服务器收到的文件不完整

Android客户端使用Socket发送大文件,服务器收到的文件不完整,第1张

概述我想通过套接字从 Android向服务器发送大文件,但服务器收到的文件不完整. Android上的代码: Socket client = new Socket(ipStr, 4444); OutputStream outputStream = client.getOutputStream(); FileInputStream fileInputStream = new FileInputSt 我想通过套接字从 Android向服务器发送大文件,但服务器收到的文件不完整.

AndroID上的代码:

Socket clIEnt = new Socket(ipStr,4444); OutputStream  outputStream = clIEnt.getoutputStream(); fileinputStream fileinputStream = new fileinputStream(file); BufferedinputStream bufferedinputStream = new BufferedinputStream(fileinputStream);  byte[] buffer = new byte[512]; byte[] sendLen = getBytes(file.length(),true); outputStream.write(sendLen);    outputStream.flush(); int count; while ((count = fileinputStream.read(buffer)) > 0) {    outputStream.write(buffer,count); } outputStream.flush(); bufferedinputStream.close(); outputStream.close(); clIEnt.close();

服务器代码:

byte[] recvhead = new byte[8];inStream.read(recvhead,8);long recvLength =  getLong(recvhead,false);fileOutputStream file =  new fileOutputStream(filename,false);byte[] buffer = new byte[8192];int count = 0;while (count < recvLength) {    int n = inStream.read(buffer);                      if(n == -1)        break;    file.write(buffer,n);    count += n;                 }

但服务器将在读取(缓冲区)中阻塞(文件androID发送的大约是30M).

这是奇怪的事情:
当我在发送文件时向文件添加输出时,服务器可以正常工作.

fileOutputStream file2 =  new fileOutputStream("/sdcard/testfile",false); while ((count = fileinputStream.read(buffer)) >= 0) {     outputStream.write(buffer,count);     outputStream.flush();     file2.write(buffer,count);     file2.flush(); }

有人可以帮我这个吗?谢谢!

解决方法 你不能假设你读那样的8个长度字节.您可以在长度数组中读取少至一个字节.我会使用DatainputStream.readLong()来编写它,并使用DataOutputStream.writeLong()来编写它.或者,当你在一个文件后关闭时,完全删除长度字,直到EOS才读.

其余的代码看起来还不错.如果接收器在read()中阻塞,则数据仍然存在,并且发送方仍在发送.

总结

以上是内存溢出为你收集整理的Android客户端使用Socket发送大文件,服务器收到的文件不完整全部内容,希望文章能够帮你解决Android客户端使用Socket发送大文件,服务器收到的文件不完整所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1124706.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-30
下一篇2022-05-30

发表评论

登录后才能评论

评论列表(0条)

    保存