欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

关于TCP中文件传输阻塞问题的原因及解决方案和相关优化。

程序员文章站 2022-07-01 14:59:56
...
    **## 在自学java过程中遇到的一些问题**

关于TCP中文件传输阻塞问题的原因及解决方案和相关优化。

  1. 对于如图所示——文件传输示例:由客户端读取本机文件并上传至服务器,服务器进行读取后保存到服务器硬盘上。

  2. 但此过程中易出现阻塞问题,即客户端和服务器端在文件传输完成后不会停止,陷入阻塞,从而导致while循环后面的内容无法编译运行。
    导致问题的原因,本人认为并不是老师所讲的客户端服务器端都无法读取while中的-1,而是客户端读取到-1之后直接退出循环,停止向服务器端输出,导致服务器端whlie循环陷入死循环,从而阻塞。

  3. 解决方法:
    我们可以找到这样一个方法void shutdownOutput() 用于禁用此套接字的输出流; 所以我们在客户端while循环结束,即上传完文件后,写入这样一个方法,对于TCP套接字,任何先前写入的数据将被发送,随后是TCP的正常连接终止序列,即自动写入终止序列。


优化

当然,为了防止文件名覆盖问题,我们可以自己定义命名规则

  •           //域名+毫秒值+随机数*
    
String filename="itcast"+System.currentTimeMills()+new random().nextInt(9999)+".jpg";

以及令服务器端accept进行死循环,能够一直处于监听状态
另外可以使用线程来提高效率:

new Thread(new Runnable(){
    @Override
    public void run(){
      //上传文件相关代码
}
    }
)
相关标签: java tcpip