socket是网络编程的基础,本文用打电话来类比socket通信中建立TCP连接的过程。
socket函数,表示你买了或者借了一部手机。
bind函数,告诉别人你的手机号码,让他们给你打电话。
listen函数,打开手机的铃声,而不是静音,这样有电话时可以立马反应。listen函数的第二个参数,最大连接数,表示最多有几个人可以同时拨打你的号码。不过我们的手机,最多只能有一个人打进来,要不然就提示占线。
connect函数,你的朋友知道了你的号码,通过这个号码来联系你。在他等待你回应的时候,不能做其他事情,所以connect函数是阻塞的。
accept函数,你听到了电话铃声,接电话,accept it!然后“喂”一声,你的朋友听到你的回应,知道电话已经打进去了。至此,一个TCP连接建立了。
read/write函数,连接建立后,TCP的两端可以互相收发消息,这时候的连接是全双工的。对应打电话中的电话煲。
close函数,通话完毕,一方说“我挂了”,另一方回应"你挂吧",然后将连接终止。实际的close(sockfd)有些不同,它不止是终止连接,还把手机也归还,不在占有这部手机,就当是公用电话吧。
注意到,上述连接是阻塞的,你一次只能响应一个用户的连接请求,但在实际网络编程中,一个服务器服务于多个客户,上述方案也就行不通了,怎么办?想一想1860,移动的声讯服务台,也是只有一个号码,它怎么能同时服务那么多人呢?可以这样理解,在你打电话到1860时,总服务台会让一个接线员来为你服务,而它自己却继续监听有没有新的电话接入。在网络编程中,这个过程类似于fork一个子进程,建立实际的通信连接,而主进程继续监听。1860的接线员是有限的,所以当连接的人数达到上线时,它会放首歌给你听,忙等待,直到有新的空闲接线员为止。
实际网络编程中,处理并发的方式还有select/poll/epoll等。
下面是一个实际的socket通信过程:
相关推荐
微信小程序利用Echarts加载中国地图的步骤
微信小程序如何利用Echarts加载地图?可按照如下四个步骤进行。(阅读时间大概3分钟)。
大话「socket 编程」
文章目录Socket 介绍字节序简介字节序转换函数socket 地址通用 socket 地址专用 socket 地址IP地址转换TCP 通信流程socket 函数TCP 通信实现 Socket 介绍 所谓 socket(套接字),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。 一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。从所处的地位来讲,套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议进行通信的接口,是应用程序与网络协议根进行交互的接口。 soc
手把手教你用U盘制作Win11启动盘:从PE工具到系统安装全流程
本文提供了一份详尽的Windows 11启动盘制作与系统安装全流程指南。从选择合适的U盘和PE工具开始,重点讲解了如何正确制作包含EFI引导分区的启动盘,并详细演示了在PE环境下进行GPT分区、使用CGI工具安装系统镜像,以及首次启动后的关键设置步骤,帮助用户轻松完成从零到一的系统安装。
通俗讲解什么是Socket通讯
一篇文章通俗易懂讲解什么是Socket通讯
西门子1500T系列凸轮同步(CAMIN指令用法)
添加凸轮工艺对象(TO_CAM),也就是凸轮表。开始编程,先写2个轴的使能、回原点与主轴的定位。监控主轴与从轴的位置、速度关系是否满足实验要求。1.添加工艺对象(1个定位轴,1个同步轴)调用CAMIN指令 ,凸轮耦合。主轴为旋转轴且为模数轴。3.调用插补凸轮盘指令。4.仿真、监控、调试。
W5500 MACRAW模式实战:在ESP32上抓取并解析原始以太网数据包
本文详细介绍了如何在ESP32开发板上使用W5500芯片的MACRAW模式捕获和解析原始以太网数据包。通过硬件连接指南、代码实现示例和协议解析技巧,帮助开发者深入理解网络通信底层机制,实现网络嗅探和自定义协议开发等高级应用。
【计算网络篇】通俗解释什么是Socket
首先应用层准备好要发送的数据,然后给了传输层,传输层的主要作用就是为发送端和接收端提供可靠的连接服务,传输层将数据处理完后就给了网络层。废话不多说,开始进入正题。写这篇文章的目的就是为了让大家对于Socket有个大概的了解,文章中有很多东西都没有提到,比如TCP/IP体系结构中每一层的作用远没有我说的那么简单,大家如果有兴趣的话可以再深入的学习一下。要想解释清楚Socket,首先要知道TCP,要想知道TCP,那就得对TCP/IP的体系结构以及每一层的大概工作有所了解,那么我们就先来说说TCP/IP的分层。
瑞芯微RK3568与RK3566芯片选型指南:从接口差异到应用场景深度解析
在嵌入式系统与边缘计算领域,芯片选型是决定产品成败的关键一步。其核心在于理解芯片的架构、接口扩展能力与系统可靠性之间的平衡。以瑞芯微(Rockchip)的RK3568和RK3566为例,这两款同为四核A55架构的芯片,在基础算力上相近,但其面向的应用赛道却因接口配置而截然不同。RK3568凭借其双千兆网口、PCIe 3.0高速接口以及全链路ECC内存支持,在技术价值上更侧重于构建高可靠、高扩展性的系统,如边缘计算网关、工业控制器和网络视频录像机(NVR)。相比之下,RK3566则以其精简的接口配置,精准服务
什么是Socket
Socket(套接字)是计算机网络中的一个抽象层,它允许应用程序通过网络进行通信。套接字用于跨网络的不同主机上的应用程序之间的数据交换。在互联网中,套接字通常基于 TCP(传输控制协议)或 UDP(用户数据报协议)来实现数据的可靠传输或快速传输。它是一组用于网络通信的API,包括了一系列的函数和数据结构,它提供了一种标准的网络编程接口,使得应用程序可以在网络中进行数据传输。Socket本身并不是一个具体的实现,而是一个抽象的概念。不同的操作系统和编程语言可以通过不同的方式来实现Socket API。
进阶06:C#连接TwinCAT 3使用ADS通讯
本文介绍了使用C#通过ADS协议与倍福TwinCAT3 PLC通讯的实现方法。主要内容包括:1)在两台电脑上安装TwinCAT3开发环境并建立网络连接;2)在TwinCAT中定义变量和结构体;3)使用C# Winform开发界面,通过TwinCAT.Ads.dll实现读写功能;4)实现主动读取和通知两种数据获取方式。详细说明了连接建立、变量定义、读写操作及事件通知的实现代码。该方案实现了对PLC寄存器数据的实时监控和操作,为工业控制系统的开发提供了参考。
YOLOP v2!YOLOv7结合YOLOP的多任务版本 更好、更快、更强
YOLOP v2!YOLOv7结合YOLOP的多任务版本 更好、更快、更强
用大白话解释什么是Socket
我在去年就学习过Java中Socket的使用,但对于Socket的理解一直都是迷迷糊糊的。看了网上很多关于Socket的介绍,看完还是不太理解到底什么是Socket,还是很迷。直到最近在学习计算机网络,我才对Socket有了一个更深地理解。之前一直不理解Socket就是因为没学过计算机网络,所以对于很多概念都很模糊,那么今天我就争取用最简单的话来解释清楚到底Socket是一个什么东西,希望能够帮助到那些正在学习Socket的同学。废话不多说,开始进入正题。...
矩阵奇异值分解算法(SVD)的导数 / 灵敏度分析
设矩阵X∈Rm×nX∈Rm×nXUΣV⊤XUΣV⊤U∈Rm×mU∈Rm×m为左奇异向量矩阵;V∈Rn×nV∈Rn×n为右奇异向量矩阵;Σdiagσ1σ2σrΣdiagσ1σ2σr为奇异值对角阵(rrankXrrankX我们关心:当XXX发生微小扰动dXdX时,UΣVUΣV如何变化?dXdUΣV⊤dX。
java的第一天
Android system recovery :安卓系统恢复 reboot system now :现在重新启动系统 apply update from sdcard :从sdcard应用更新 confilm wipe of all user data.this can not be undone.:confilm清除所有用户data.this的无法挽回。 wipe cache p
温度PID控制PLC程序
温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值
jdk-8u144-linux-x64.tar.gz.
该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包
iOS面试必备:iOSDevelopmentTips中的HTTP状态码与Socket通信知识
掌握HTTP状态码和Socket通信,不仅能轻松通过iOS面试,更能在实际开发中快速定位网络问题,提升应用性能。希望本文对你的学习有所帮助! 🚀
锂电池充电器电路设计 里面有电路
锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。
大熊君大话NodeJS之------Net模块
一,开篇分析 从今天开始,我们来深入具体的模块学习,这篇文章是这个系列(大熊君大话NodeJS)文章的第三篇,前两篇主要是以理论为主,相信大家在前两篇的学习中, 对NodeJS也有一个基本的认识,没事!!!趁热打铁,让我们继续将NodeJS进行到底,好了废话不多说,直接进入今天的主题 “Net模块” ,那么”Net“应该如何理解那? 它是做什么用的那?(Net模块可用于创建Socket服务器...
efm32 入门.pdf
本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。
大话 Select、Poll、Epoll
大话 Select、Poll、Epoll 黄日成 2017-07-17 92标签: 性能优化 , 经验分享 提到select、poll、epoll相信大家都耳熟能详了,三个都是IO多路复用的机制,可以监视多个描述符的读/写等事件,一旦某个描述符就绪(一般是读或者写事件发生了),就能够将发生的事件通知给关心的应用程序去处理该事件。本质上,select、poll、epoll本质上都
大话netty系列之--伪异步BIO
生意规模扩大 话说,老王和大明的生意越来越好,这就需要两个人增强业务往来,由于天南地北,两个人只能每次运输都需要雇一个人去运货(new 一个线程),一个月下来,两人一算,人力成本太大了,光是雇佣人一个月就用了将近一百个人,本来生意旺盛,却还亏损了。两个人思来想去,想到了一个好主意,可以租个宿舍,就固定雇佣几个人,谁闲着谁就去运输,这样可以大大降低人的数量,又可以充分发挥人的效率。 其实上面这种思路...
C#异步通信概念及应用浅析
转自夜里煞白http://developer.51cto.com/art/200908/145381.htm C#异步通信概念及应用浅析 2009-08-20 18:47 夜里煞白 百度空间 字号:T | T C#异步通信概念及应用主要向你介绍了C#异步通信的实现方法和操作的具体的实现方法,希望对你理解和学习C#异步通信有所帮助。 AD:51CTO 网+ 第十二期沙龙:大话
socket技术路线_学了C++不知道怎么搞后台开发?先看看这份学习路线吧!
作者:AJ 在去年结束的秋季招聘中,后台开发或服务器开发的岗位需求一度火热,甚至超过了算法岗。不少同学从诸神黄昏的算法岗战场上退下,转向更偏向工程能力的后台开发岗,从而造成后台开发岗位竞争的大爆发。后台开发工程师主流使用的编程语言有C++、Java、PHP以及目前慢慢流行的Golang等。本文就将以C++的角度,讲讲如何学习和准备后台开发的岗位。 一、语言基础 无论是C++开发还是Java开发,对...
java.net.SocketException四大异常解决方案
转自链接:http://developer.51cto.com/art/201003/189724.htm java.net.SocketException在我们使用的时候会出现很多异常,这些会影响到我们的学习和使用。下面我们就仔细的研究一下。 AD
重识NIO
#NIO实战 1. 重识socket编程 1.1 概念 传统的socket编程是bio的,是阻塞的,也就是说在单线程的情况下,serversocket只可以接受一个客户端连接,有个处理方法是,把serversocket设置为多线程的,即每次都创建一条线程来处理客户端的业务,这样serversocket可以连接多个客户端。但是线程数的暴增会增加cpu的负担,而且线程的来回切换也会降低性能。 1...
【随笔】腾讯一面有感
13点30分,从宿舍出发。骑车过去h
一个优秀的程序员应该养成哪些好的习惯?_如何养成良好的编程习惯
220047)]
推荐几本经典计算机书籍
【说明】推荐这些书,仅仅是因为自己看过后,觉得好。希望对大家有帮助。推荐的原则是可以看懂,并且值得反复看几遍。 【书籍推荐】 1 C语言 (1)《C与指针》 推荐理由:非常基础和经典。虽然叫C与指针,但不全是讲指针。与很多C基础类书籍,如《C Plus Primer》,互补。值得看5遍的书籍。这个类型,还有几本书,如《C++沉思录》(正在看,建议去图书馆借着看,个人感觉不很易懂),建议先去
学术分享资料
最强大的工具: http://www.google.com http://www.baidu.com 代码相关: google代码搜索:http://www.google.com/codesearch google代码:http://code.google.com 提供项目托管功能 sourceforge开源项目社区:http://www.sourceforge.net pud
5273



被折叠的 条评论
为什么被折叠?



