VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 732|回复: 5

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

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




上一篇:动态连接库
下一篇:电脑管家有个清理插件的功能,插件指的是什么,怎么编写?
51_avatar_middle
最佳答案
8 
online_admins 发表于 2018-9-28 14:18:03 | 显示全部楼层
1、可以用 select 选择模型,或者 异步选择 模型等来监视多个socket;
2、多个客户端用什么都行,数组,链表,队列,具体还是看楼主的需求,也就是数据,链表,队列这些容器的区别;
3、一次没读完自然是还会有更多的数据,如果有数据来的时候事件或者选择模型会触发的,接着收数据就行了。
05_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 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
最佳答案
8 
online_admins 发表于 2018-9-28 18:32:17 | 显示全部楼层
coolhty 发表于 2018-9-28 16:26
1.是用的异步选择,我就是在想底层是不是同样是多线程,要不怎么并发处理客户端SOCKET
2.基本明白,只是 ...

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

另外,即使使用单线程一样可以轮训多个socket!
98_avatar_middle
最佳答案
0 
online_moderator 发表于 2018-9-28 22:59:21 | 显示全部楼层
非阻塞,就是你调用send,recv等网络,会立即返回,不会等待是否成功。这个就是我们说的网络费非阻塞,这个异步模型是2个东西。刚开始学习网络编程,其实可以不要那么在意异步,从原始的同步加多线程,因为一般开发客户端,用不了几个socket的。
05_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2018-9-29 10:12:03 | 显示全部楼层
Syc 发表于 2018-9-28 18:32
可以参考下我的教程《Winsock异步IO模型中》WSAAsyncSelect模型的讲解:
https://www.cctry.com/thread-2 ...

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


客户端数量大于等于1就不接客了。。
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

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

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

GMT+8, 2019-11-13 11:22

Powered by Discuz! X3.4

© 2009-2019 cctry.com

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