关于TCP中文件传输阻塞问题的原因及解决方案和相关优化。
程序员文章站
2022-07-01 14:59:56
...
**## 在自学java过程中遇到的一些问题**
-
对于如图所示——文件传输示例:由客户端读取本机文件并上传至服务器,服务器进行读取后保存到服务器硬盘上。
-
但此过程中易出现阻塞问题,即客户端和服务器端在文件传输完成后不会停止,陷入阻塞,从而导致while循环后面的内容无法编译运行。
导致问题的原因,本人认为并不是老师所讲的客户端服务器端都无法读取while中的-1,而是客户端读取到-1之后直接退出循环,停止向服务器端输出,导致服务器端whlie循环陷入死循环,从而阻塞。 -
解决方法:
我们可以找到这样一个方法void shutdownOutput()
用于禁用此套接字的输出流; 所以我们在客户端while循环结束,即上传完文件后,写入这样一个方法,对于TCP套接字,任何先前写入的数据将被发送,随后是TCP的正常连接终止序列,即自动写入终止序列。
优化
当然,为了防止文件名覆盖问题,我们可以自己定义命名规则
-
//域名+毫秒值+随机数*
String filename="itcast"+System.currentTimeMills()+new random().nextInt(9999)+".jpg";
以及令服务器端accept进行死循环,能够一直处于监听状态
另外可以使用线程来提高效率:
即
new Thread(new Runnable(){
@Override
public void run(){
//上传文件相关代码
}
}
)
上一篇: 做好公众号的用户拉新的方法
下一篇: 浅谈运营就是持改完善的过程