最近看《Windows网络编程》,很奇怪的是书中居然没有给出一个实用的多连接的例子!不由得大失所望。原想自己动手做一个,试了试,发现竟有很多困惑----是否应该使用多线程?是一个连接对应一个线程还是多个线程共一个线程?在MFC程序中如何产生一个窗口供响应SOCKET消息用?是一个线程一个窗口还是所有的SOCKET共用同一个窗口?如果网络通讯非常繁忙的话,单线程、单SOCKET窗口的效率如何,能及时处理所有的数据据吗?如此种种,真是满头雾水!都说做网络程序用API是最好的,对此嘿嘿,苦笑。欢迎四方高手畅谈,尤其是实际做过此类程序的朋友。
解决方案 »
- 求爬虫工具.
- 绘图软件的画布
- 自定义的CMyEdit与界面上的控件如何关联起来
- carray指针作为函数参数的问题
- Why the compiler said that Dlg_OnCopy does not take one paramater ?
- 如何实现类似于windows任务管理器中对cpu使用率的那种曲线绘制的功能
- LINK : fatal error LNK1104: cannot open file "kernel32.lib" 这种编译错误该怎么办?
- help!字符串转换,
- 字符转义(急)
- Edit 控件的一个简单问题
- 关于中软有哪位知道?竟请指点,谢!
- unsigned char *str 怎样转换为char temp[10]
[email protected]非常感谢!BIND 兄:我没有用API的方法做过,用的 CAsyncSocket 做的,服务端做一个列表,当有客户请求连接时NEW 一个新的CCLIENT ,这个类用来和客户通信,他自已被保存在列表中。 客户端连接多个服务器时是这样做的,做了一个 CStation 类,在这个类中生成定义的数目的客户 SOCKET 每个客户 SOCKET 连接一个服务器,如果发现断线或不通则自已清除自已,再生成一个 SOCKET 再连 过程就是这样,现在用于江西的监控网络,还可以,没有问题,速度也不错,断线还可以自已重连
是不是用多线程是两个方面的考虑.
1) 让CPU的IDLE时间减少, 比如一个线程在做IO的时候, 可以有另外的线程投入运行
2) 你所使用的模型的局限, 比如你用WSAEventSelect的话, 一个线程最多处理64个连接.
你使用这个模型没有什么问题的, 它使用窗口的消息队列做并发访问的串行化, 不限制连接的数量. 但性能不太好...
如果你的程序有移植性的考虑, 比如在UNIX/LINUX平台上运行. 就用select好了, 如果你的应用可以指定你的服务器的运算能力及操作系统的话就用完成端口. 剩下来的一些不大的应用就用AsyncSelect好了. 其实传奇游戏的服务器端用Delphi写的, 用的就是这个模型, 所以速度... :)
我是通过异步处理,不过直接用自己封装的API.
用 AsyncSocket 就可以了,我做了一个现成的,用得很好
http://tangentsoft.net/wskfaq/examples/basics/select-server.html
_________
都可以.在MFC程序中如何产生一个窗口供响应SOCKET消息用?是一个线程一个窗口还是所有的SOCKET共用同一个窗口?
________
共用.如果网络通讯非常繁忙的话,单线程、单SOCKET窗口的效率如何,能及时处理所有的数据据吗?
_______
有完成端口可用.
在win32下,用完成端口!
>>>>>完成端口是不能考虑的,因为WIN98不支持啊!
完成 端口的本质就是线程池,win98下自己做一个,呵呵。