高性能TcpServer - 4.文件通道(处理:文件分包,支持断点续传)

高性能TcpServer - 1.网络通信协议

高性能TcpServer - 2.创建高性能Socket服务器SocketAsyncEventArgs的实现(IOCP)

高性能TcpServer - 3.命令通道(处理:掉包,粘包,垃圾包)

高性能TcpServer - 4.文件通道(处理:文件分包,支持断点续传)

高性能TcpServer - 5.客户端管理

高性能TcpServer - 6.代码下载

应用场景

升级程序

流程:终端->查询服务器版本比较->升级程序(获取包数,获取各包数据)->数据拼装生成文件->最后更新服务器上该设备的版本信息

分包代码段:

static Dictionary<int, string> ReadFile(string path)

{

Dictionary<int, string> dicFileData = new Dictionary<int, string>();

FileStream fs = new FileStream(path, FileMode.Open);

BinaryReader binReader = new BinaryReader(fs);

int bagindex = 1;

int dataindex = 0;

byte[] bBuffer = new byte[fs.Length];

int bagsize = 235;// 一包数据大小

byte[] temp = new byte[bagsize];

binReader.Read(bBuffer, 0, (int)fs.Length);

for (int i = 0; i < bBuffer.Length; i++)

{

if ((bagsize - 1) == dataindex || (bBuffer.Length - 1) == i)

{

if ((bBuffer.Length - 1) == i) temp[dataindex++] = bBuffer[i];

string data = CCommonFunc.ToHexString(temp, dataindex, false);

dicFileData.Add(bagindex, data);

bagindex++;

dataindex = 0;

temp = new byte[bagsize];

}

temp[dataindex++] = bBuffer[i];

}

binReader.Close();

fs.Close();

return dicFileData;

}

测试:

原文地址:https://www.cnblogs.com/chen1880/p/11238734.html

时间: 2024-08-29 02:01:09

高性能TcpServer - 4.文件通道(处理:文件分包,支持断点续传)的相关文章

高性能TcpServer&#160;-&#160;3.命令通道(处理:掉包,粘包,垃圾包)

高性能TcpServer - 1.网络通信协议 高性能TcpServer - 2.创建高性能Socket服务器SocketAsyncEventArgs的实现(IOCP) 高性能TcpServer - 3.命令通道(处理:掉包,粘包,垃圾包) 高性能TcpServer - 4.文件通道(处理:文件分包,支持断点续传) 高性能TcpServer - 5.客户端管理 高性能TcpServer - 6.代码下载 处理原理: 每个client创建各自的byte[]数组,通过遍历每个字节的数据 1.判断包长

高性能TcpServer&#160;-&#160;5.客户端管理

高性能TcpServer - 1.网络通信协议 高性能TcpServer - 2.创建高性能Socket服务器SocketAsyncEventArgs的实现(IOCP) 高性能TcpServer - 3.命令通道(处理:掉包,粘包,垃圾包) 高性能TcpServer - 4.文件通道(处理:文件分包,支持断点续传) 高性能TcpServer - 5.客户端管理 高性能TcpServer - 6.代码下载 链路清理 1. 客户端主动断开连接(socket能侦测到) 2.未知原因导致连接中断(拔网线

Java NIO3:通道和文件通道

通道是什么 通道式(Channel)是java.nio的第二个主要创新.通道既不是一个扩展也不是一项增强,而是全新的.极好的Java I/O示例,提供与I/O服务的直接连接.Channel用于在字节缓冲区和位于通道另一侧的实体(通常是一个文件或套接字)之间有效地传输数据. 通常情况下,通道与操作系统的文件描述符(FileDescriptor)和文件句柄(FileHandler)有着一对一的关系.虽然通道比文件描述符更广义,但开发者经常使用到的多数通道都是连接到开放的文件描述符的.Channel类

ORA-03113:通信通道的文件结尾

问题: 用命令startup启动实例时,报错“ORA-03113:通信通道的文件结尾”. 解决: SQL> startup mount ORACLE 例程已经启动. Total System Global Area 835104768 bytes Fixed Size 2217952 bytes Variable Size 637536288 bytes Database Buffers 188743680 bytes Redo Buffers 6606848 bytes 数据库装载完毕. SQ

Oracle 11.2.0.1的一个Bug,客户端报ORA-03113: 通信通道的文件结尾

半小时前,一个项目反馈应用系统部分功能报错,ORA-03113: 通信通道的文件结尾.好像是个常见的错误. 异常信息:ORA-03113: 通信通道的文件结尾 进程 ID: 2392 会话 ID: 298 序列号: 46826 检查了归档日志未发现异常,检查Oracle日志时发现对应ORA-03137错误,经查阅网上资料,属于Oracle的bug,God,竟然隐蔽在ORA-03113后面. Errors in file d:\app\administrator\diag\rdbms\fssc\f

nio文件通道

以下摘自java NIO 中文版 文件通道总是阻塞式的,因此不能被置于非阻塞模式.现代操作系统都有复杂的缓存和预取机制,使得本地磁盘I/O操作延迟很少.网络文件系统一般而言延迟会多些,不过却也因该优化而受益.面向流的I/O的非阻塞范例对于面向文件的操作并无多大意义,这是由文件I/O本质上的不同性质造成的.对于文件I/O,最强大之处在于异步I/O(asynchronous I/O),它允许一个进程可以从操作系统请求一个或多个I/O操作而不必等待这些操作的完成.发起请求的进程之后会收到它请求的I/O

(转) java 复制文件,不使用输出流复制,高效率,文件通道的方式复制文件

public static void fileChannelCopy(File s, File t) { FileInputStream fi = null; FileOutputStream fo = null; FileChannel in = null; FileChannel out = null; try { fi = new FileInputStream(s); fo = new FileOutputStream(t); in = fi.getChannel();// 得到对应的文

Oracle错误——ORA-03113:通信通道的文件结尾

我的Oracle数据库是去年11月份安装的,然后安装好之后配置了一下,那个时候是正常的,没有什么问题,但是后来我就一直没有用自己本地的Oracle,使用的PL/SQL一直连的是同事的机子,然后今天突然想在自己的机子上做些测试,PL/SQL居然一直连不上,提示了下面这个错误. 提示ORA-03113:通信通道的文件结尾 进程 ID :0 会话 ID:0 序列号:0 之后就是一系列的度娘谷歌论坛等等折腾,折腾了良久,终究是给解决了. 解决方法: 第一步: sqlplus / as sysdba sh

Oracle错误——ORA-03113:通信通道的文件结尾 解决办法

由来 今天跟往常一样,登陆PL/SQL,确登陆失败,出现一个错误"ORA-01034"和"ORA-27101"如图: 然后就就通过命令提示符去登陆Oracle,去查看怎么回事,然后问题进一步出现,错误"ORA-03113:通信通道的文件结尾 进程 ID:6320 回话 ID :191 序列号:3". 问题根源 Oracle出现错误,于是去错误日志里去找问题根源:在 e:\app\kang\diag\rdbms\oracle\oracle\trac