Linux Socket 编程原理详解

Linux Socket 编程原理详解不用多说,经典的TCP/IP三次握手及状态变迁图================================================================================================================函数:socket()–创建套接字,它会创建一个结构体及收发缓冲区。此时并不指定该套接字在哪个IP和PORT口上,bind()–用于将套接字绑定在特定的IP/PORT上listen()–用于为侦听端口创建两个队列(见上图

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

不用多说,经典的TCP/IP三次握手及状态变迁图

 

 

Linux Socket 编程原理详解Linux Socket 编程原理详解

Linux Socket 编程原理详解

========================================================

========================================================

函数:
socket() — 创建套接字,它会创建一个结构体及收发缓冲区。此时并不指定该套接字在哪个IP和PORT口上,
bind() — 用于将套接字绑定在特定的IP/PORT上
listen() — 用于为侦听端口创建两个队列(见上图)用于接收客户端的SYN请求
accept() — 将侦听端口中的ESTABLISHED队列中取出那些连接
connect() — 客户端连接请求

客户端过程:socket() -> bind(optional) -> connect()
服务器过程:socket() -> bind(mandatory) -> listen() -> accept()

>>>> 客户端一定需要调用bind函数吗?

bind的目的是将socket绑定在特定的IP/PORT口上,客户端通常在connect时会采用临时分配的PORT,IP会根据路由表选择合适的一个本地IP,通常意义下,客户端可以不指定。
服务端则必须指定调用bind去绑定特定的PORT,但IP可以不须指定。否则,如果系统临时分配,则客户端的连接请求可能不知发往哪里。对于IP,当然是本地IP,如果刻意绑定,也必须指定本地中的其中一个。

>>>> listen的真正目的???

listen的函数为侦听端口创建两个队列:未完成队列(SYN_RCV状态)和已完成队列。如果不调用listen,则客户端过来的SYN请求无法入队接受进一步的处理。因此,listen是服务器的必须过程。

>>>> listen时如果客户端到达最大允许数了,对于新过来的SYN请求怎么处理?

对于AF_INET通信域来说,底层用重传SYN消息,如达到最大重传次数仍无法入队,则返回TIMEOUT错误。
对于AF_UNIX通信域来说,connect()函数会返回 EREFUSE 错误信息。

>>>> TCP建立三次握手,而释放需要四次握手,为什么释放时不能三次完成呢?

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/180886.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 鸿蒙3部曲先看哪部,星辰变是“鸿蒙”系列的作品,那“鸿蒙”系列到底有多少部曲?…

    鸿蒙3部曲先看哪部,星辰变是“鸿蒙”系列的作品,那“鸿蒙”系列到底有多少部曲?…说到《星辰变》,相信很多人都知道他的作者就是番茄吧?而番茄笔下最出名系列的小说,无疑就是“鸿蒙”系列了,其中《星辰变》就是“鸿蒙”系列中的一部作品。那“鸿蒙”系列小说到底有多少部曲呢?对此也有很多人有了这个疑问。原先的“鸿蒙三部曲”相信很多熟悉番茄小说的朋友都知道,原本番茄的《盘龙》《星辰变》《吞噬星空》被很多粉丝称之为“鸿蒙三部曲”。因为在《星辰变》的结局中我们也知道,鸿蒙创立了三个不同的世界,…

  • 获得焦点与失去焦点事件

    获得焦点与失去焦点事件一介绍获得焦点事件(onfocus)是当某个元素获得焦点时触发事件处理程序。失去焦点事件(onblur)是当前元素失去焦点时触发事件处理程序。一般情况下,这两个事件是同时使用的。 二应用文本框获得焦点时改变背景颜色本示例是在用户选择页面中的文本框时,改变文本框的背景颜色,当选择其他文本框时,将失去焦点的文本框背景颜色恢复原始状态。 三代码

  • Java中Ajax学习「建议收藏」

    Java中Ajax学习「建议收藏」1.Ajax:异步js和xml异步刷新:如果网页中某一个地方需要修改,异步刷新可以使,只刷新该需要修改的地方,而页面其他中的地方保持不变。例如:百度搜索框,视频的点赞等实现(两种方式):Js:XMLHttpRequest对象XMLHttpRequest对象的方法:open(方法名【提交方式get或者post】,服务器地址,ture【是否选用异步刷新,99%都是ture】):与服务端建立连接send():get: send(null)post: send(参数值)setRequestHe

  • debug编写汇编程序_eclipse中的debug

    debug编写汇编程序_eclipse中的debug关于汇编程序debug的使用完整使用教程-干货满满debug的命令符具体使用流程###前言在网上搜索了10min,大多数关于汇编程序debug功能的使用的文章,发现大多数都是一样的,只是简单的介绍了debug的一些命令符之类的,均没有谈及你自己编写的汇编程序应该如何使用debug。这对新人学习汇编很不友好!debug的命令符debug命令符Explain-a逐行汇编…

    2022年10月15日
  • pycharm过期了_pycharm到期怎么延长

    pycharm过期了_pycharm到期怎么延长pycharm的LICENSE过期1.把jetbrains-agent.jar复制到bin目录下,我的是在download里,找了半天才找到2.vmoptions64和vmoptions最后加上-javaagent:/目录/jetbrains-agent.jar一定不要写错,写错出不来注册框3.注册框弹出来,选择Licenseserver方式,地址填入:http://jetbrain…

  • ByteBuffer的用法[通俗易懂]

    ByteBuffer的用法[通俗易懂]ByteBuffer也许很多人不常用,其实它是最常用的缓冲区,可以负责缓冲存储一段数据,供数据的写入和读取。ByteBuffer是NIO里用得最多的Buffer。ByteBuffer最核心的方法是put(byte)和get()。分别是往ByteBuffer里写一个字节,和读一个字节。值得注意的是,ByteBuffer的读写模式是分开的,正常的应用场景是:往ByteBuffer里写一些数

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号