社区
网络编程
帖子详情
iocp接收文件,每次GetQueuedCompletionStatus每次接收一定的数据,这里应该怎么处理呢?
ggt87125
2012-03-19 12:41:26
iocp接收文件,每次GetQueuedCompletionStatus每次接收一定的数据,这里应该怎么处理呢?
...全文
190
4
打赏
收藏
iocp接收文件,每次GetQueuedCompletionStatus每次接收一定的数据,这里应该怎么处理呢?
iocp接收文件,每次GetQueuedCompletionStatus每次接收一定的数据,这里应该怎么处理呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
mengrongqing20
2012-03-19
打赏
举报
回复
在设计数据时,扩展OVERLAPPED
如
My_OVERLAPPED
{
OVERLAPPED overlapped; //第一个字段一定是OVERLAPPED
FILE *pf;
。。。
}
在WSARecv时提交的OVERLAPPED指针时使用上面的数据结构
在处理接收数据时,将OVERLAPPED指针强制转换为自定义结构,在这里就可以获取到文件指针或者其他希望在工作者线程中处理的数据。
fishion
2012-03-19
打赏
举报
回复
可以在pCompletionKey 中保存下文件句柄,当文件写完后再关闭
ggt87125
2012-03-19
打赏
举报
回复
[Quote=引用 1 楼 visualeleven 的回复:]
你自己的数据不知道该怎么处理吗?
[/Quote]
在GetQueuedCompletionStatus数据的时候,每次要重新打开文件把数据写入吗? 有没有什么接收文件的思路 能说下嘛?
Eleven
2012-03-19
打赏
举报
回复
你自己的数据不知道该怎么处理吗?
报警服务,从串口读报警,用TCP把报警发送到客户端,包括完成端口通讯,ADO
数据
库访问,串口通讯等类
报警服务,从串口读报警,用TCP把报警发送到客户端,包括完成端口通讯,ADO
数据
库访问,串口通讯等类
简单的完成端口
IOC
P全称I/O
Com
p
let
ion
Port,中文译为I/O完成端口。
IOC
P是一个异步I/O的API,它可以高效地将I/O事件通知给应用程序。与使用select()或是其它异步方法不同的是,一个套接字[socket]与一个完成端口关联了起来,然后就可继续进行正常的Winsock操作了。然而,当一个事件发生的时候,此完成端口就将被操作系统加入一个队列中。然后应用程序可以对核心层进行查询以得到此完成端口。 大体上来讲,使用完成端口只用遵循如下几个步骤: (1) 调用 Create
IoC
omp
let
ion
Port() 函数创建一个完成端口,而且在一般情况下,我们需要且只需要建立这一个完成端口,把它的句柄保存好,我们今后会经常用到它…… (2) 根据系统中有多少个
处理
器,就建立多少个工作者(为了醒目起见,下面直接说Worker)线程,这几个线程是专门用来和客户端进行通信的,目前暂时没什么工作; (3) 下面就是
接收
连入的Socket连接了,这里有两种实现方式:一是和别的编程模型一样,还需要启动一个独立的线程,专门用来accept客户端的连接请求;二是用性能更高更好的异步AcceptEx()请求。 (4) 每当有客户端连入的时候,我们就还是得调用Create
IoC
omp
let
ion
Port()函数,这里却不是新建立完成端口了,而是把新连入的Socket(也就是前面所谓的设备句柄),与目前的完成端口绑定在一起。 至此,我们其实就已经完成了完成端口的相关部署工作了,嗯,是的,完事了,后面的代码里我们就可以充分享受完成端口带给我们的巨大优势,坐享其成了,是不是很简单呢? (5) 例如,客户端连入之后,我们可以在这个Socket上提交一个网络请求,例如WSARecv(),然后系统就会帮咱们乖乖的去执行
接收
数据
的操作,我们大可以放心的去干别的事情了; (6) 而此时,我们预先准备的那几个Worker线程就不能闲着了, 我们在前面建立的几个Worker就要忙活起来了,都需要分别调用Get
Queue
d
Com
p
let
ion
Status
() 函数在扫描完成端口的队列里是否有网络通信的请求存在(例如读取
数据
,发送
数据
等),一旦有的话,就将这个请求从完成端口的队列中取回来,继续执行本线程中后面的
处理
代码,
处理
完毕之后,我们再继续投递下一个网络通信的请求就OK了,如此循环。
IOC
P模型C++入门级服务端搭建-
接收
客户端
数据
并
处理
WSARecv函数是从面向连接socket或面向无连接的socket
接收
数据
。
完成端口 Get
Queue
d
Com
p
let
ion
Status
异常
处理
公司的校园平安卡产品,C/S结构,客户端数目大概50个,服务端采用
IOC
P(完成端口)与客户端通信,Socket UDP协议。 服务端程序基本流程: 1.程序建立
IOC
P模型并绑定Socket,用WSARecvFrom 向
IOC
P通道中投递
数据
接收
请求 2.Work线程,整体是循环:使用Get
Queue
d
Com
p
let
ion
Status
获取通道中已经完成的请求和
数据
,然后有一个判断:
ioc
p端口断开_在完成端口
IOC
P模型判断客户端是否已关闭连接(掉线) | 学步园
判断客户端是否关闭:1 Get
Queue
d
Com
p
let
ion
Status
返回 FALSE,根据错误号判断。2 客户端端定时发送(也就是心跳包判断)补:Get
Queue
d
Com
p
let
ion
Status
的返回值为 ERROR_SUCCESS 和lpNumberOfBytes 为0的时,客户端sockt关闭。在测试的时候,连接的客户端发生异常崩溃,强制关闭客户端后,Get
Queue
dCo...
网络编程
18,356
社区成员
64,214
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章