社区
进程/线程/DLL
帖子详情
IO完成端口 如何用WSASend一次发送多个数据包
princesshan
2012-12-25 11:05:49
IO完成端口 如何用WSASend一次发送多个数据包
例如,希望发送10个 1k 的数据包,是需要调用10次WSASend吗?还是只需要调用一次就可以了?
最好给一些示例代码,谢谢。
...全文
141
4
打赏
收藏
IO完成端口 如何用WSASend一次发送多个数据包
IO完成端口 如何用WSASend一次发送多个数据包 例如,希望发送10个 1k 的数据包,是需要调用10次WSASend吗?还是只需要调用一次就可以了? 最好给一些示例代码,谢谢。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
xumaojun
2012-12-25
打赏
举报
回复
不一定是调用10次,因为你想发生的数据和实际发送的数据的数目不一定一致
princesshan
2012-12-25
打赏
举报
回复
楼上的,好像不行,收到不到数据。 我在msn上找了个例子,也不行。 我在网上找了一个例子 http://wenku.baidu.com/view/72f4b71055270722192ef7fc.html 是用io完成端口传输文件的。 如果我不需要传输文件,每次接受到客户端的请求命令,假如为“aa”,然后 就向客户端回传 10个大小为1k的数据包,应该怎么修改?
yaozhiyong110
2012-12-25
打赏
举报
回复
int WSASend ( SOCKET s, LPWSABUF lpBuffers DWORD dwBufferCount, LPDWORD lpNumberOfBytesSent, DWORD dwFlags, LPWSAOVERLAPPED lpOverlapped, LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine ); 你可以吧10个包拼一个WSABUF一次发 也可以建一个WSABUF[10]数组 lpBuffers传数组首地址 dwBufferCount 传10 这样也只要调用一次WSASend 你还可以一次只发一个包 调用10次WSASend
princesshan
2012-12-25
打赏
举报
回复
谁能给个io完成端口的例子,收到客户端的链接后,发送数据时,有时候需要连着发送多个,因为数据比较大。
完成
端口
例子
IO
CP聊天室程序
学习
完成
端口
的例子 聊天室的代码 学习
完成
端口
的例子 C++大的代码 学习
完成
端口
的例子 汗,我不知道说什么哈 学习
完成
端口
的例子
完成
型
端口
(
IO
CP)使用总结
详细解释
完成
型
端口
的原理及开发。(
IO
CP(I/O Complet
io
n Port,I/O
完成
端口
)是性能最好的一种I/O模型。它是应用程序使用线程池处理异步I/O请求的一种机制。。。)
代码客:G-Socket(
IO
CP) 1.0 (Server/Client)例程源码+Server体验程序+强大的压力测试工具
结构层次及相互联系 (1)、工作线程:响应连接的
IO
投递返回并负责投递读请求,并将
IO
返回结果投递给处理线程,可设定参数决定工作线程数量; (2)、处理线程:处理线程调用回调函数将信息传递给应用层或协议栈,可设定参数决定工作处理数量; (3)、看守线程:响应Accept事件调用AcceptEx,检测连接和心跳超时 ,将信息投递给工作线程,模块仅有一个看守线程。 1. 技术要求 (1)、线程同步:Lock指令、临界段; (2)、主要Socket API:W
SAS
end
、WSARecv、AcceptEx、DisconnectEx; (3)、内存管理:连接池(句柄重用)、内存池; (4)、数据0拷贝:通过内置处理线程,上层应用可以避免自建线程池及复制数据的过程。同时提供GBuf内存分配功能,应用层获得分配地址及填充数据之后亦可直接投递给内核/驱动层; (5)、数据顺序同步:同一个连接同时只有一个处理线程响应其
IO
事件; (6)、
IO
请求投递:单投递读、多投递写; (7)、0缓冲读投递:可条件编译实现,以适用大规模连接要求。 (8)、超时机制:可设置空连接(连接不
发送
数据)超时时间以防止DOS攻击,也可设置心跳超时时间防止网络故障导致的现有连接成为虚连接避免耗尽系统资源。 (9)、接口技术:API、回调函数、客户句柄(客户连接句柄)。 (10)、主、被动
发送
:不使用HASH、MAP及LIST技术,即可提供安全可靠高效的客户连接句柄,以实现服务器端主被动
发送
数据功能; (11)、PerHandleData的回收不以
IO
投递的计数器或链表来做依据但仍能安全回收,同时尽量避免在高频的读写操作时做其他无关的操作以提高读写效率。 (12)、处理线程和工作线程有着良好分工界限,繁重的工作交给处理线程
完成
,工作线程工作量最大限度的减少,仅响应投递返回及读投递的操作; (13)、支持AWE,模块自动识别AWE是否开启(需手动开启),“否”则使用虚拟内存机制。 2. 功能要求 (1)、多IP多
端口
监听,每个监听可设置不同的回调函数,以高效的区别处理数据 (2)、可设置每秒最大的连接并发量和空连接(连接不发数据)超时时间以防止DOS攻击造成的服务瘫痪、具有心跳处理(防网络异常造成的虚连接)功能 (3)、不加协议的透明传输,可适用广泛的网络通讯环境 (4)、可现实主、被动
发送
数据,但不会因兼顾主动
发送
而额外增加降低效率的工作 (5)、内置处理线程,上层应用可不必自建线程池处理数据,所有
IO
事件按顺序调用回调函数并可以在回调函数内直接处理数据,不必担心多线程造成的接收数据乱序的问题。 (6)、高效率的数据对应关联机制,在初次连接并根据登录数据设置每个连接对应的宿主(Owner)之后,再接收的数据即可立即获得该连接对应的宿主,而不必再做额外的查询工作,并且模块内部采用的是指针关联方式,对于长连接、主动
发送
的服务器系统而言是高效率的。 (7)、可兼容IPv6 3. 注意事项 因硬件环境和应用环境不同,不合理的配置会出现效率及性能上的问题,因此以下情况出现时,请务必与作者联系以确保获得更好的参数配置: (1)、连接量超过1000个的。超过的应结合具体硬件配置和网络带宽等因素综合设定运行参数。 (2)、带宽使用率超过20%的。工作线程和处理线程数量的设置也是综合考虑数据吞吐量和数据处理负载的因素来设置的,过多的线程会在调度上浪费时间,同时也应该综合考虑线程优先级别来设置工作线程和处理线程数量,两者的设置也不一定能相等。 (3)、服务器端有主动
发送
需求的、短连接(含网络故障造成的连接断开)出现频率高的。 压力测试工具介绍: 一、 使用G-TcpClient模块 二、 可以设定间隔时间发起大规模长、短连接 三、 可以发起密集
数据包
,包括即时和定时
发送
,1M的光纤带宽最大可以达到100K/S(单向)以上,100M本地网最大可以达到10M/S(单向)以上 四、 数据
发送
仅由一个独立线程但当,每点击
一次
Connect就创建一个线程根据当前参数发起连接。 五、 测试前提:服务器接收客户端数据后立即原样返回给客户端
win_
io
cp_client
网络开发中用到的
Windows
io
完成
端口
Windows 提供一种称为I/O
完成
端口
(I/O Complet
io
n Port)机制,能够让I/O的
完成
处理交由一个专门的线程池来
完成
,而线程池的线程数量是一个可配置的参数。这种做法将I/O请求的发起动作与
完成
处理分离到了不同的线程中。Create
Io
Complet
io
nPort函数会创建一个I/O
完成
端口
,并使其与一个或
多个
文件句柄发生关联。I/O
完成
端口
是内核对象。
进程/线程/DLL
15,473
社区成员
49,171
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章