c++ socket通信 服务端设计思路,包括阻塞和非阻塞的。
重点需要:
1.多个客户端连接服务端,服务端采用一个客户开一个accept线程好,还是一个accept服务多个客户?
2.当客户端们连接上了服务端后,服务端如何能够知道那个客户端给他发了信息;在需要给指定的客户端发送信息的时候,如何做?
重点需要:
1.多个客户端连接服务端,服务端采用一个客户开一个accept线程好,还是一个accept服务多个客户?
2.当客户端们连接上了服务端后,服务端如何能够知道那个客户端给他发了信息;在需要给指定的客户端发送信息的时候,如何做?
解决方案 »
- 求助:窗口放大
- 请教各位大虾一个菜鸟问题^_^
- stock object:是什么意思?主要是stock是什么意思?
- HEAP: Free Heap block 376160 modified at 37618c after it was freed
- 视频系统,C#开发UI,vc++开发底层,是否可行??本人无多语言开发经验,有相关经验的人能给点主意吗?
- 如何把CSting的类型转换成整型
- 我想得到系统的I/O 吞吐量,网络负荷等信息,怎么做?
- 如何给CStatic添加垂直滚动条?
- cannot open include file 'afxres.h'是怎么回事啊
- 请问那里有能反编译用vc++、c++、c语言编的程序
- 关于事件接收容器类的问题
- Udp数据包如何自动转化为TCP数据包?
2.服务端可以根据信息源socket(Accept之后会产生一个会话socket,而不是延用listen socket),然后在你的整个处理过程当中把它当成参数(或者某一参数的部分),于是在任何时间点都能够明确当前服务的是哪socket(连接会话).
1.accept()放在主线程,然后可以accpet后,每个客户开一个线程处理(最简单的模型了)
2.accept()后的socket就是客户的标识,都是唯一的,这些socket句柄你自然要用链表或容器保存好,之后用时再搜索就知道哪个是哪个了.
通信的时候就靠这些socket就可以了..
在服务器端调用accept以后,会返回一个socket,以后这个socket就是和你的某一个客户端(就是你发送connect请求的那个)对应连接起来的了,以后所有的io操作就在服务器和客户端的这两个socket之间进行了,这就是因为tcp是有连接的
>在服务器端调用accept以后,会返回一个socket,以后这个socket就是和你的某一个客户端(就是你发送connect请求的那个)对应连接起来的了,以后所有的>io操作就在服务器和客户端的这两个socket之间进行了,这就是因为tcp是有连接的.我为accept返回的socket选择了事件(FD_READ | FD_WIRTE)然后将该socket放到vector里面了。
问题:
1.在放入容器的时候是不是需要做个CritialSection保护一下?(可能在收到FD_READ的事件的时候会读vector)。
2.需要为每一个客户端开一个线程来通信吗?还是一个线程来服务?都有什么好处和坏处?谢谢各位的回答。
我很想了解服务器线程控制方面。感谢!
1.多个客户端连接服务端,服务端采用一个客户开一个accept线程好,还是一个accept服务多个客户?
一对一吧
2.当客户端们连接上了服务端后,服务端如何能够知道那个客户端给他发了信息;在需要给指定的客户端发送信息的时候,如何做?
这个就是每一个socket来链接的时候都不一样的,都具有唯一性,你要负责保持好这些数据(用链表就可以)
我觉得应该是为每个用户的通讯开一个线程的,如果你并发要求高的话,你必须使用线程池了,这样有点吃力不讨好。上面有人推荐了windows下的iocp完成端口,这也是我windows下最好的网络模型了
在linux下的话,有一个叫epoll的模型,也用来应付高并发的