当我们调用如下代码的时候,实际java封装了很多层调用

图1

new ServerSocket(9876) 这个构造函数的内部,会调用 bind() 以及 listen() 等系统调用,之后才是 accept(),下面依次讲解。

bind(): bind 只是简单的将套接字和 地址端口联系上,调用bind()之后,netstat 不会看到任何连接

listen(): listen 表示此套接字 已经处于监听状态了,外部请求可以打进来了。

图2

可以看到,并没有运行到 accept() ,socket已经处于监听状态了,那此时如果外部连接打进来会怎样呢?我们用浏览器模拟http请求。 打开 chrome 输入 127.0.0.1:9876 回车,

图3

可以看到 55870 端口建立了连接 (ESTABLISHED 表示连接已经建立)  (55868那个端口不知道怎么来的,有知道的大神希望能指点一下)。然后我们在浏览器多开几个窗口输入,会发现连接建立的更多了。

图4

所以,listen的时候,是可以接收请求并建立连接的,只是不处理这个socket的内容而已。参考UNIX网络编程(卷一,套接字联网API 第三版 p85),此时系统维护两个队列,未完成建立连接队列(三次握手只进行了第一步)和 已完成建立连接队列(上述ESTABLISTHED的连接)。而之后的 accept() 会在已建立连接队列获取套接字来处理。

accept() :会从上述已建立连接套接字队列,获取队列头部的socket,来进行处理,每次accept()都会返回一个对应客户端的全新socket 。当建立连接队列为空时,accept会阻塞并处于睡眠状态。

另注:当accept() 之后,如果一个请求打过来,服务器处理请求之后,并不会将连接中断,而是会一直通过 客户端的 keepAlived 来维持这个连接

图4

可以看到  都是从客户端发送的 keepalived 请求,服务端回应ack。

补充一下:在listen之前,创建的socket都默认为要主动 connect 其他服务的,即为主动socket,只有listen 之后,socket 才变为被动的。服务端的socket 都是listen了之后,才变为服务socket的。

作者:熊哥的世界
链接:https://www.jianshu.com/p/64ca562f156a
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

https://www.jianshu.com/p/64ca562f156a

简书上的大牛总结的 ServerSocket Accept() 的确是阻塞方法 与猜想一致 一些理解 转载如下相关推荐

  1. 爬取某位大佬简书上所有文章并保存为pdf

    点击上方"AirPython",选择"置顶公众号" 第一时间获取 Python 技术干货! 阅读文本大概需要 8 分钟. 1 目 标 场 景 现如今,我们处于一 ...

  2. 简书上使用markdown

    Markdown介绍 Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式. Markdown语法的目标是:成为一种适用于网络的书写语言「 ...

  3. 简书python_在简书上一起学Python是怎样一种体验

    『Python爬虫小分队』学习群开到第三期,有近百人参加了Python爬虫入门学习,我们采用的方式:简书文章布置作业和进度,微信群答疑和讨论,QQ群.直播平台串讲和辅导,简书专题收作业. 一期二期的作 ...

  4. 简书markdown支持html,简书上使用Markdown(超详细)

    Markdown介绍 Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式. Markdown语法的目标是:成为一种适用于网络的书写语言「 ...

  5. android elevation translationz 简书,Android5.x中的阴影效果elevation和translationZ的实现方法...

    android5.x中 view多了一个 属性 z,垂直高度上的变化. Z属性  由两部分组成,elevation 和 translationZ android:id="@+id/me_da ...

  6. 如何写好标题,才能轻松上简书首页?

    "标题在大部分的广告中,都是最重要的元素,能够决定读者到底会不会看这则广告.一般来说,读标题的人比读内文的人多4倍,你所写的标题的价值僵尸整个广告预算的80%."  -大卫·奥格威 ...

  7. 纯JavaScript在网页上实现”简书“的文章编辑器

    今天在"简书"上看到发文章的文本编辑器,觉得很神奇,很梦幻,于是想在网页上实现一下.先上一张自己实现的网页编辑器的效果: 原理:多个input文本域叠加使用 每次点击按钮的时候,都 ...

  8. 从用户反馈看简书APP

    最近在系统地学习"第三节课"的产品经理课程.有一个模块是通过用户反馈发现问题,课间思考作业是以简书为例,整理简书在App store的点评情况.恰好我也是简书的用户,同时手机上也装 ...

  9. 我的简书两月记:数据可视化

    一.前言 "你无法衡量的东西,你也无法管理." 这是<精益数据分析>里提到的管理学大师彼得·德鲁克的一句话.我很认同. 很多人来简书写作,或长或久,可能无法准确量化自己 ...

最新文章

  1. 中科大博士20万字正经论文:教你如何给女朋友送礼物
  2. szu cf集训Codeforces Round #631 (Div. 2)A ~ D[贪心,数据结构,思维,dp]
  3. golang 映射 map 简介
  4. Linux-SFTP/SSH免密码,钥匙登录
  5. 无约束优化算法——牛顿法与拟牛顿法(DFP,BFGS,LBFGS)
  6. spark集群详细搭建过程及遇到的问题解决(三)
  7. JDK,JRE,JVM三者关系
  8. 中小企业 DevOps 从 0 到 1
  9. pytorch线性回归(笔记一)
  10. 基于FPGA实现uart串口模块(Verilog)--------接收模块及思路总结
  11. 实时帧数手机_小米部分高刷新率机型吃鸡强制开启120帧
  12. 轻量级 Visio,绘制程序框图,你值得拥有
  13. ecshop mysql密码忘记_ECSHOP后台密码忘记了怎么办
  14. java 阳历日期时间获取年月日时干支
  15. 0813Python总结-tcp,udp及黏包,struck模块
  16. 洛谷 P2706 巧克力 题解
  17. AD18运行PCB DRC显示一处警告, Design contains shelved or modified (but not repoured) polygons.
  18. 调用第三方api在线生成二维码
  19. android动态文本框,Android文本框实现搜索和清空效果
  20. Python+selenium注册唯一账号

热门文章

  1. Python的零基础超详细讲解(第六天)-Python的数字类
  2. Python实战案例,CV2模块,Python实现抖音字符视频
  3. umi3 如何管理model_django admin 管理工具
  4. android 高德地图纠偏,高德地图纠偏算法(android ,ios)
  5. mysql binlog 丢失_mysql数据库binlog丢失引起的问题
  6. Redis的主从复制与高可用搭建(哨兵模式)
  7. 第十篇学会编写python代码_Python之路,第十篇:Python入门与基础10
  8. 科学计算机坏了怎么办,科学家:如果人脑像电脑一样运行,1分钟内就会烧坏!...
  9. ue4 开发动作游戏_两年时间独自用UE4制作的动作游戏,传说一般的制作人离忧先生...
  10. confluence统计用户文章_公众号流量主后台数据查看及统计分析