这里描述下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()阻塞

最新文章

  1. Paypal开发中遇到请求被中止: 未能创建 SSL/TLS 安全通道及解决方案
  2. 查询Oracle正在执行和执行过的SQL语句
  3. Java Calendar 类的时间操作
  4. 第四周psp
  5. JAVA 正则表达式、汉字正则、 java正则代码
  6. css 细节收集
  7. 各种边框样式。。本以为border不是这么用的。
  8. Kettle中通过触发器方式实现数据 增量更新
  9. CSS3特性修改(自定义)浏览器默认滚动条
  10. iOS navigationBar 的isTranslucent属性
  11. mySql一个字段的值模糊匹配多表多列的查询
  12. 小程序从后台输出的代码为HTML实体字符如何解决?
  13. python+selenium五:多窗口切换与获取句柄
  14. Java类和对象的概念
  15. jzoj5341 捕老鼠
  16. lintcode-65-两个排序数组的中位数
  17. hdu 1181:变形课(搜索水题)
  18. Android SurfaceView播放视频时横竖屏的调整
  19. loadrunner11操作手册
  20. CDH与原生态hadoop之间的区别(转)

热门文章

  1. mysql:字符串转换为日期类型
  2. log4net:保存日志到数据库
  3. 初识C++的类
  4. UML精粹1 - 简介
  5. Lambda表达式的演化,委托-匿名方法-Func-Lambda
  6. 十大关系数据库SQL注入工具一览
  7. JS-改变页面的颜色(三)
  8. lisp 题目
  9. java基础回顾(八)——Queue
  10. C++学习基础七——深复制与浅复制