完成端口接受文件数据解决方案
来源:互联网 发布:4k视频剪辑软件 编辑:程序博客网 时间:2024/05/02 12:20
完成端口: IO CompletionPort 简称IOCP中文名称完成端口,它是一种端口模型,用于管理大批量socket数据的时候非常有效率,所以此端口模型常常用在服务器软件上处理大量的客户端请求.这是微软开发出的一种模型, IIS服务器软件就是用到了这种技术.
传送数据: 当服务器端用完成端口开发时, 客户端连接服务端后并发送下载数据请求时, 服务端会另起一个线程专门给客户端发送数据, 这时客户端只要接受数据就行. 但是客户端要向服务端发送数据呢? 这就是所谓的"上传", 这个问题过会再讨论.
反向连接: 通常我们所说的连接应该就是正向连接, 客户端连接服务器, 但是"反向连接"是服务器主动连接客户端,其他的一切与正向连接没有什么区别.这种技术在许多..backdoor软件中会用到,因为它可以逃脱杀毒软件的追踪, 或伪装成普通的IE软件为客户端提供服务等.
现在客户端用完成端口实现, 并且利用反向连接方式,管理大批量的的服务端程序. 发送普通的指令没有任何的问题,但是当客户端要接受服务端大量的数据时该怎么办呢. 普通的完成端口管理大量的socket,它当检测到某一socket有数据过来的时候就会单独开一个线程. 接受文件莫非是由多个数据包组成, 难道又多个数据包就要开多少个线程知道把所有的数据接受完为止.直今为止我看有如下几中办法:
1 单开连接, 当完成端口收到要将要传送数据的消息时, 客户端与服务器端再另外建立一个连接, 不管谁连谁, 之后这个连接只要接受负责传送数据即可,传送完毕断开此连接. 这样似乎有点小题大做了,费资源.
2, 开线程, 当完成端口收到某Socket要传送文件时候开一个线程, 之后每受到该文件的一个数据包时就会通知这个线程继续接受数据, 可以用信号singal来具体实现,这样就会牵扯到共享内存, 互斥等问题,可用临界区变量来解决此问题.在该线程接受数据的同时,客户端与服务器之间的连接该做什么就做什么.看来这种方法行的通
3,暂时独占该连接,,当完成端口收到某Socket要传送文件时把不把再向完成端口投递接受数据请求,这样完成端口就不会再检测到这个socket上的数据,所以客户端的程序会在其他地方管理该socket连接,用完这个socket传送文件后,再往完成端口上投递接受请求,让完成端口再接着管理. 这种方法似乎也可行.
4,这是最没头脑的方法, 每接受一个数据包,开一个线程去接受数据,这种方法行的通,只不过这样会极大的消耗资源,因为每一个数据包不应超过4k~10k字节,传送100M的文件将要开1W个线程.
综上所述,根据各种不同的需求,选择不同的方式,如果可以任意开连接用第一种就不错,但如果不想再开连接,那就用第三种方法就行.不知朋友们还有什么方法呢。
- 完成端口接受文件数据解决方案
- 完成端口->接受连接请求(收集)
- 完成端口详细说明(接受连接请求)
- 完成端口中WSAENOBUFS错误的解决方案
- 完成端口中WSAENOBUFS错误的解决方案
- 于完成端口的数据接收问题
- 完成端口
- 完成端口
- 完成端口
- 完成端口
- 完成端口
- 完成端口
- 完成端口
- 完成端口
- 完成端口
- 完成端口
- 完成端口
- 完成端口 完成端口 完成端口 还是完成端口
- 软件评测师考试结束了 ,最近正在找工作~
- 关于RDF Schema的一些概念
- 大阪第73天——被刘三忽悠了,被张怀旧骗了,被蓝发女孩郁闷了
- 高执行效率的数学库开发(2)
- List的用法小探
- 完成端口接受文件数据解决方案
- 2道关于 SQLServer 数据库方面的题目:
- 无锡的水好臭啊
- 动态画面
- 字符串匹配(string matching)算法之一 (Naive and Rabin_Karp)
- .net+socket
- 本地网络连接——已选“连接后在通知区域显示图标”却不显示
- 奇瑞汽车内网安全解决方案成功经验谈
- 关于C++学习的再思考