我需要能够读取文件,将其分解为任意大小的数据包,比如说512字节,然后通过TCP发送这些数据包.问题是,接收者没有获得即时消息发送的所有字节.如果我发送1000个数据包,则接收器从InputStream读取时会阻塞,因为他没有更多数据可读取990个数据包左右.

这是代码(只是发送和接收部分):

发件人:

int parts = (int)Math.ceil((double)(file.length()/512.0));

out.println(parts+"");

int readFile;

int i = 0;

while ((readFile = fileIn.read(buffer)) != -1) {

i++;

fileOut.write(buffer, 0, readFile);

fileOut.flush();

System.out.println("-- Sent packet " + i + "/" + parts + ". " + "Bytes sent = " + readFile);

}

接收方:

int parts = Integer.parseInt(in.readLine());

byte[] buffer = new byte[512];

FileOutputStream pw = new FileOutputStream("file.ext");

DataInputStream fileIn = new DataInputStream(socket.getInputStream());

for(int j = 0; j < parts; j++){

int read = 0;

if(j == parts - 1){

read = fileIn.read(buffer);

pw.write(buffer, 0, read);

}else{

fileIn.readFully(buffer);

pw.write(buffer);

}

System.out.println("-- Received packet " + (j+1) + "/" + parts + ". Read " +read+ " bytes.");

}

我尝试增加套接字的发送和接收缓冲区的大小,但没有成功.我想念什么?

这是一个输出示例:

发件人:

-- Sent packet 1/10. Bytes sent = 512

-- Sent packet 2/10. Bytes sent = 512

-- Sent packet 3/10. Bytes sent = 512

-- Sent packet 4/10. Bytes sent = 512

-- Sent packet 5/10. Bytes sent = 512

-- Sent packet 6/10. Bytes sent = 512

-- Sent packet 7/10. Bytes sent = 512

-- Sent packet 8/10. Bytes sent = 512

-- Sent packet 9/10. Bytes sent = 512

-- Sent packet 10/10. Bytes sent = 234

接收方:

-- Received packet 1/10. Read 512 bytes.

-- Received packet 2/10. Read 512 bytes.

-- Received packet 3/10. Read 512 bytes.

-- Received packet 4/10. Read 512 bytes.

-- Received packet 5/10. Read 512 bytes.

-- Received packet 6/10. Read 512 bytes.

-- Received packet 7/10. Read 512 bytes. (And it blocks here, because there is no more data to read)

java tcp 字节_java-TCP文件传输中缺少字节相关推荐

  1. java p2p 下载_java p2p文件传输(含服务器端与jsp源码)

    [实例简介] [实例截图] [核心代码] import java.net.*; import java.util.List; import java.awt.*; import javax.swing ...

  2. java条码大小_java – 自定义条形码输入中缺少条形码高度

    我正在整合FedEx运输API以使用 Java生成标签.一切都很好,但除了这个问题.在为FedEx Freight设置LabelFormatType到COMMON2D或LABEL_DATA_ONLY时 ...

  3. java写入txt数据丢失_文件传输中的数据丢失 – JAVA?

    我有一个FileServer和一个FileClient,服务器在客户端连接时发送文件.这是一个简单的程序,只是为了理解背后的概念. 我能够将文件从Server发送到Client,缓冲区为1024. 问 ...

  4. Java 基于TCP的socket实现文件传输

    Java 基于TCP的socket实现文件传输 基于TCP的socket结合java的io流 实现客户端与服务器之间的文件传输 Socket 套接字(socket)是一个抽象层,应用程序可以通过它发送 ...

  5. 文件服务器恢复测试,基于文件传输中文件损坏检测和恢复办法.doc

    基于文件传输中文件损坏检测和恢复办法 基于文件传输中文件损坏检测和恢复办法 摘 要:在网络上文件传输是一种常见的应用,讨论在文件传输完成后检测错误和恢复数据的办法. 关键词:文件传输;文件校验;恢复 ...

  6. 使用ADB Pull文件传输中卡住的解决方法

    使用ADB Pull文件传输中卡住的解决方法 原因分析: 尝试的方法 最终解决方法 优化方法 原因分析: 硬件:PCIE转USB3.0(无供电),PC到手机延长线15M. 使用同一ADB.exe程序在 ...

  7. python网络通信中cs架构_python3基于TCP实现CS架构文件传输

    本文实例为大家分享了python3实现CS架构文件传输的具体代码,供大家参考,具体内容如下 1.目标: 基于tcp实现CS架构的文件传输 指令列表:(1)get:从服务器端下载文件 (2)put:向服 ...

  8. java file 网络文件_Java 网络文件传输

    读者范围: 本文是一篇简短入门文章.本文假设读者对Java的IO系统和Java的网络系统有所了解. 正文: 关于文件传输的问题,实际也是一种IO读写的基本问题.对于网络而言也是一种IO读写问题.因此所 ...

  9. c++ udp多线程 例子_[内附完整源码和文档] 基于udp实现tcp功能进行大文件传输

    一.项目要求 Please choose one of following programing languages: C, C++, Java, Python; 本项目采用的是python3.6 L ...

最新文章

  1. 从零开始MDT2010学习手记(二) 创建共享工作目录
  2. KVM - 调整cpu内存、网卡
  3. 鸟哥的Linux私房菜(服务器)- 第四章、连上 Internet
  4. 设计模式(10)-装饰模式详解(易懂)
  5. 由浅至深,谈谈.NET混淆原理 -- 五(MaxtoCode原理),六(其它保护方法)
  6. UDP穿透NAT原理解析
  7. NetBeans Weekly News 刊号 # 27 - Sep 24, 2008
  8. 一起学习C语言:结构体(一)
  9. Linux系统的启动引导过程(转)
  10. 产品经理 - 汽车维修连锁企业 - 发展预测
  11. Git 基础(十)—— 常用命令
  12. React :caniuse-lite is outdated. please run next command
  13. 超级搜索术5-商业变现/生活便捷
  14. 小白学习 指针,指针变量,指针变量大小
  15. C# 单个按钮实现暂停或继续
  16. IBM服务器管理口IMM使用指南
  17. 10月10日科技资讯 |罗永浩向老同事道歉;三星漏洞已波及四千万用户;Clojure 1.11 即将发布 | 极客头条
  18. 数据分析python面试题_10道Python常见面试题
  19. google map
  20. 二、创建基础的drill集群

热门文章

  1. Python基础入门教程(4)(数据类型)
  2. 计算机培训机房装修,计算机机房装修基本流程 计算机机房装修要注意什么
  3. 教你如何制作漂亮的马赛克效果
  4. 案例1: Dynatrace分析某财险承保系统内存泄漏问题
  5. CamDroid连接WiFi
  6. 仙人掌之歌——高层人事风波
  7. 第五章 kubernetes创建kubeconfig 文件
  8. 浅谈境外黑客组织利用SonarQube漏洞攻击事件
  9. oracle 11g r2 价格,oracle 11gr2
  10. 【每天学习一点新知识】如何绕过CDN查真实ip