VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 1091|回复: 1

[讨论] 使用IOCP框架制作端口转发映射方案征集

[复制链接]
66_avatar_middle
最佳答案
0 
online_vip 发表于 2022-5-16 15:27:51 | 显示全部楼层 |阅读模式
100驿站币
我目的想做一个端口转发器
我大概说下我当前的大体方法步骤:
线程池一
1. 创建一个服务   WSAStartup(MAKEWORD(2, 2), &data)
2. 创建一个Socket WSASocket(AF_INET, SOCK_STREAM, IPPROTO_TCP, NULL, 0, WSA_FLAG_OVERLAPPED);
3. 绑定端口       bind(m_ListenSocket, (sockaddr*)&service, sizeof(sockaddr_in));
4. 监听端口       listen(m_ListenSocket, SOMAXCONN);
5. 创建IOCP       CreateIoCompletionPort(INVALID_HANDLE_VALUE, NULL, 0, 0);
                  CreateIoCompletionPort((HANDLE)tSocket, m_hCompletionPort, (ULONG_PTR)pSockData, 0);
6. 开始监听每个客户端发来的消息
while(1){
  bIORet = GetQueuedCompletionStatus(pThis->m_hCompletionPort, &dwTrans, (PULONG_PTR)&pPerSockData, (LPOVERLAPPED *)&pOverLaps, INFINITE);
  
  case IO_TYPE_READ: //接收网络消息
  (发往服务端)
}

为了在一个线程中实现服务端发往客户端的高并发
下面我这样搭配可不可行呢(在connect()后面创建完成端口,CreateIoCompletionPort())

线程池二
1. 创建一个服务   WSAStartup(MAKEWORD(2, 2), &data)
2. 创建一个Socket WSASocket(AF_INET, SOCK_STREAM, IPPROTO_TCP, NULL, 0, WSA_FLAG_OVERLAPPED);
3. 连接到一个服务端 connect(Socket, (struct sockaddr*)&server, sizeof(struct sockaddr));
4. 创建IOCP       CreateIoCompletionPort(INVALID_HANDLE_VALUE, NULL, 0, 0);
                  CreateIoCompletionPort((HANDLE)Socket, m_hCompletionPort, (ULONG_PTR)pSockData, 0);
5. 开始监听服务端发来的消息
while(1){
  bIORet = GetQueuedCompletionStatus(pThis->m_hCompletionPort, &dwTrans, (PULONG_PTR)&pPerSockData, (LPOVERLAPPED *)&pOverLaps, INFINITE);
  
  case IO_TYPE_WRITE:
  (解析发配给指定客户端)
  }
  
为什么  GetQueuedCompletionStatus() 一直处于阻塞状态 服务端发给客户端消息 无法通过?

1.png




上一篇:通过按钮复制文件
下一篇:萌新参考别人的通讯录自己写的单链表存储结构的通讯录,大佬给给意见
55_avatar_middle
最佳答案
0 
在线会员 发表于 2022-7-18 18:05:42 | 显示全部楼层
为什么要两个线程池?只需要把连接管理好就行了,每个客户端发来消息,带上toid就可以了。
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号-4 )|网站地图wx_jqr

GMT+8, 2022-11-30 11:29

Powered by CcTry.CoM

© 2009-2021 cctry.com

快速回复 返回顶部 返回列表