java tcp 字节_java-TCP文件传输中缺少字节
我需要能够读取文件,将其分解为任意大小的数据包,比如说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文件传输中缺少字节相关推荐
- java p2p 下载_java p2p文件传输(含服务器端与jsp源码)
[实例简介] [实例截图] [核心代码] import java.net.*; import java.util.List; import java.awt.*; import javax.swing ...
- java条码大小_java – 自定义条形码输入中缺少条形码高度
我正在整合FedEx运输API以使用 Java生成标签.一切都很好,但除了这个问题.在为FedEx Freight设置LabelFormatType到COMMON2D或LABEL_DATA_ONLY时 ...
- java写入txt数据丢失_文件传输中的数据丢失 – JAVA?
我有一个FileServer和一个FileClient,服务器在客户端连接时发送文件.这是一个简单的程序,只是为了理解背后的概念. 我能够将文件从Server发送到Client,缓冲区为1024. 问 ...
- Java 基于TCP的socket实现文件传输
Java 基于TCP的socket实现文件传输 基于TCP的socket结合java的io流 实现客户端与服务器之间的文件传输 Socket 套接字(socket)是一个抽象层,应用程序可以通过它发送 ...
- 文件服务器恢复测试,基于文件传输中文件损坏检测和恢复办法.doc
基于文件传输中文件损坏检测和恢复办法 基于文件传输中文件损坏检测和恢复办法 摘 要:在网络上文件传输是一种常见的应用,讨论在文件传输完成后检测错误和恢复数据的办法. 关键词:文件传输;文件校验;恢复 ...
- 使用ADB Pull文件传输中卡住的解决方法
使用ADB Pull文件传输中卡住的解决方法 原因分析: 尝试的方法 最终解决方法 优化方法 原因分析: 硬件:PCIE转USB3.0(无供电),PC到手机延长线15M. 使用同一ADB.exe程序在 ...
- python网络通信中cs架构_python3基于TCP实现CS架构文件传输
本文实例为大家分享了python3实现CS架构文件传输的具体代码,供大家参考,具体内容如下 1.目标: 基于tcp实现CS架构的文件传输 指令列表:(1)get:从服务器端下载文件 (2)put:向服 ...
- java file 网络文件_Java 网络文件传输
读者范围: 本文是一篇简短入门文章.本文假设读者对Java的IO系统和Java的网络系统有所了解. 正文: 关于文件传输的问题,实际也是一种IO读写的基本问题.对于网络而言也是一种IO读写问题.因此所 ...
- c++ udp多线程 例子_[内附完整源码和文档] 基于udp实现tcp功能进行大文件传输
一.项目要求 Please choose one of following programing languages: C, C++, Java, Python; 本项目采用的是python3.6 L ...
最新文章
- 从零开始MDT2010学习手记(二) 创建共享工作目录
- KVM - 调整cpu内存、网卡
- 鸟哥的Linux私房菜(服务器)- 第四章、连上 Internet
- 设计模式(10)-装饰模式详解(易懂)
- 由浅至深,谈谈.NET混淆原理 -- 五(MaxtoCode原理),六(其它保护方法)
- UDP穿透NAT原理解析
- NetBeans Weekly News 刊号 # 27 - Sep 24, 2008
- 一起学习C语言:结构体(一)
- Linux系统的启动引导过程(转)
- 产品经理 - 汽车维修连锁企业 - 发展预测
- Git 基础(十)—— 常用命令
- React :caniuse-lite is outdated. please run next command
- 超级搜索术5-商业变现/生活便捷
- 小白学习 指针,指针变量,指针变量大小
- C# 单个按钮实现暂停或继续
- IBM服务器管理口IMM使用指南
- 10月10日科技资讯 |罗永浩向老同事道歉;三星漏洞已波及四千万用户;Clojure 1.11 即将发布 | 极客头条
- 数据分析python面试题_10道Python常见面试题
- google map
- 二、创建基础的drill集群