VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

有编程疑问吗?还请到提问专区发帖提问!
搜索
查看: 348|回复: 5

[求助] 刚开始学习非阻塞网络编程,有几个问题请教下。

[复制链接]
05_avatar_middle
online_vip coolhty 发表于 2018-9-28 11:18:17 | 显示全部楼层 |阅读模式
准备写个小程序,类似于FTP,但是我的程序,上传完数据后,服务端回复一个确认消息,然后断开连接。
有几点不明白的:
1.既然非阻塞不是多线程,是怎么处理并发的多个客户端的?
2.多个客户端,用什么容器装SOCKET对象合适些?
3.如果一次读取数据没全部读完,需不需要再WSAASycSelect绑定FD_READ?




上一篇:CEDIT 滚动问题

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

51_avatar_middle
online_admins Syc 发表于 2018-9-28 14:18:03 | 显示全部楼层
1、可以用 select 选择模型,或者 异步选择 模型等来监视多个socket;
2、多个客户端用什么都行,数组,链表,队列,具体还是看楼主的需求,也就是数据,链表,队列这些容器的区别;
3、一次没读完自然是还会有更多的数据,如果有数据来的时候事件或者选择模型会触发的,接着收数据就行了。

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

05_avatar_middle
ico_lz  楼主| coolhty 发表于 2018-9-28 16:26:39 | 显示全部楼层
Syc 发表于 2018-9-28 14:18
1、可以用 select 选择模型,或者 异步选择 模型等来监视多个socket;
2、多个客户端用什么都行,数组,链 ...

1.是用的异步选择,我就是在想底层是不是同样是多线程,要不怎么并发处理客户端SOCKET
2.基本明白,只是看一般专业的用哪种容器。
3.恩,是的,没读完的话要下次继续读,我的意思是需不需要调用WSAAsyncSelect这个函数再绑定一次FD_READ呢?在java里面是需要的,不知道c++是否需要,绑定一次只会触发一次,如果需要再次触发,需要再绑定

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

51_avatar_middle
online_admins Syc 发表于 2018-9-28 18:32:17 | 显示全部楼层
coolhty 发表于 2018-9-28 16:26
1.是用的异步选择,我就是在想底层是不是同样是多线程,要不怎么并发处理客户端SOCKET
2.基本明白,只是 ...

可以参考下我的教程《Winsock异步IO模型中》WSAAsyncSelect模型的讲解:
http://www.cctry.com/thread-2773-1-1.html

另外,即使使用单线程一样可以轮训多个socket!

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

98_avatar_middle
online_moderator 小鱼儿 发表于 2018-9-28 22:59:21 | 显示全部楼层
非阻塞,就是你调用send,recv等网络,会立即返回,不会等待是否成功。这个就是我们说的网络费非阻塞,这个异步模型是2个东西。刚开始学习网络编程,其实可以不要那么在意异步,从原始的同步加多线程,因为一般开发客户端,用不了几个socket的。

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

05_avatar_middle
ico_lz  楼主| coolhty 发表于 2018-9-29 10:12:03 | 显示全部楼层
Syc 发表于 2018-9-28 18:32
可以参考下我的教程《Winsock异步IO模型中》WSAAsyncSelect模型的讲解:
http://www.cctry.com/thread-2 ...

好的,我自己在百度研究下。谢谢老大
这个教程我下了,没考虑多客户端的情况。。
  1. if (m_ClientNums >= 1) {
  2.                                         break;
  3.                                 }
复制代码


客户端数量大于等于1就不接客了。。

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

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

QQ
QQ在线咨询
联系电话
13591366679
手机扫一扫 关注本站精彩内容
wxqrcode

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

GMT+8, 2018-10-20 17:46

Powered by Discuz! X3.4

© 2009-2018 cctry.com

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