c++之socket,阻塞模式
这里描述下socket的阻塞模式:
首先,socket有几个函数
socket() 创建socket
bind() 绑定socket到一个地址
listen() 开启soket监听
accept() 接受别人来连接我,这个是个阻塞函数,一般服务器调用。
recv() 接受对方发过来的消息,这个也是阻塞函数,因为TCP要等对方把消息传递完整后再执行把消息从buff里面copy过来。这个客户端和服务器都要调用,注意~!!!!!
send() 发送消息
connect() 连接socket,一般是客户端。
上面accept和recv都是阻塞函数,要注意!!!
举例:
1、server开启后,会阻塞在accetp函数,等待别人连接。
2、client 1 开启connect ,然后立即返回,继续执行客户端的代码。此刻,server收到请求,继续执行server代码,一般连接成功后写recv函数,所以server阻塞在recv。
3、client
time client 1 client 2 server
1 accept,阻塞
2 connect后立即返回
3 收到client 1的con
4 执行recv,阻塞
5 connect
6 (收到client 2的连接,但是程序阻塞,所以排入队列)
7 send("c2")
8 (收到client 2的数据,但是程序阻塞,所以排入队列)
9 recv(),阻塞
10 send("c1"), 并recv()阻塞
11 收到client 1的数据c1,并send("hello c1 , im server")
12 收到数据("hello c1 , im server")通信完成
13 server执行完11步骤后,立即查看队列还有一个没处理,所以处理c2的连接,收到数据"c2",发送(“"hello c2 , im server"”)
14 收到数据(“"hello c2 , im server"”)通信完成
15 accept()阻塞
最新文章
- Paypal开发中遇到请求被中止: 未能创建 SSL/TLS 安全通道及解决方案
- 查询Oracle正在执行和执行过的SQL语句
- Java Calendar 类的时间操作
- 第四周psp
- JAVA 正则表达式、汉字正则、 java正则代码
- css 细节收集
- 各种边框样式。。本以为border不是这么用的。
- Kettle中通过触发器方式实现数据 增量更新
- CSS3特性修改(自定义)浏览器默认滚动条
- iOS navigationBar 的isTranslucent属性
- mySql一个字段的值模糊匹配多表多列的查询
- 小程序从后台输出的代码为HTML实体字符如何解决?
- python+selenium五:多窗口切换与获取句柄
- Java类和对象的概念
- jzoj5341 捕老鼠
- lintcode-65-两个排序数组的中位数
- hdu 1181:变形课(搜索水题)
- Android SurfaceView播放视频时横竖屏的调整
- loadrunner11操作手册
- CDH与原生态hadoop之间的区别(转)