咸鱼笔记—Socket 通信
咸鱼笔记—Socket 通信
socket是在应用层和传输层之间的一个抽象层,socket本质是编程接口(API),它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用以实现进程在网络中通信。TCP/IP只是一个协议栈,必须要具体实现,同时还要提供对外的操作接口(API),这就是Socket接口。通过Socket,我们才能使用TCP/IP协议。
我们先来看看网络层级模型图,这是构成网络通信的基础:
我们看看 TCP/IP 模型的传输层和应用层,传输层比较熟悉的概念是 TCP 和 UDP,UPD 协议基本就没有对 IP 层的数据进行任何的处理了。而 TCP 协议还加入了更加复杂的传输控制,比如滑动的数据发送窗口(Slice Window),以及接收确认和重发机制,以达到数据的可靠传送。应用层中网页常用的则是 HTTP。
TCP 和 HTTP 两者的关系:我们知道网络通信是最基础是依赖于 IP 和端口的,HTTP 一般情况下默认使用端口 80。
举个简单的例子:我们逛淘宝,浏览器会向淘宝网的网址(本质是IP)和端口发起请求,而淘宝网收到请求后响应,向我们手机返回相关网页数据信息,实现了网页交互的过程。而这里就会引出一个多人连接的问题,很多人访问淘宝网,实际上接收到网页信息后就断开连接,否则淘宝网的服务器是无法支撑这么多人长时间的连接的,哪怕能支持,也非常占资源。也就是应用层的HTTP 通过传输层进行数据通信时,TCP 会遇到同时为多个应用程序进程提供并发服务的问题。多个 TCP连接或多个应用程序进程可能需要通过同一个 TCP 协议端口传输数据。为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP 协议交互提供了套接字(Socket)接口。应用层可以和传输层通过 Socket
接口,区分来自不同应用程序进程或网络连接的通信,实现数据传输的并发服务。
简单来说,Socket 抽象层介于传输层和应用层之间,跟 TCP/IP 并没有必然的联系。Socket 编程接口在设计的时候,就希望也能适应其他的网络协议。
套接字(socket)是通信的基石,是支持 TCP/IP 协议的网络通信的基本操作单元。它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息:连接使用的协议(通常是 TCP 或 UDP),本地主机的 IP 地址,本地进程的协议端口,远地主机的 IP 地址,远地进程的协议端口。
所以,socket 的出现只是可以更方便的使用 TCP/IP 协议栈而已,简单理解就是其对 TCP/IP 进行了抽象,形成了几个最基本的函数接口。比如 create,listen,accept,connect,read 和 write 等等。以下是通讯流程
建立 Socket 通信需要一个服务器端和一个客户端
服务器端先初始化Socket,然后与端口绑定,对端口进行监听,调用accept阻塞,等待客户端连接。在这时如果有个客户端初始化一个Socket,然后连接服务器(connect),如果连接成功,这时客户端与服务器端的连接就建立了。
客户端发送数据请求,服务器端接收请求并处理请求,然后把回应数据发送给客户端,客户端读取数据,最后关闭连接,一次交互结束。
参考资料:https://www.cnblogs.com/wangcq/p/3520400.html
micropython测试代码
咸鱼笔记—Socket 通信相关推荐
- Android开发笔记(一百一十一)聊天室中的Socket通信
Socket通信 基本概念 对于程序开发来说,网络通信的基础就是Socket,但因为是基础,所以用起来不容易,今天我们就来谈谈Socket通信.计算机网络有个大名鼎鼎的TCP/IP协议,普通用户在电脑 ...
- 笔记2:VC++ socket通信实例
VC++ socket通信实例 网络中进程之间如何通信 首要解决的问题是如何唯一标识一个进程,在本地可以通过进程PID来唯一标识一个进程,但是在网络中这是行不通的.其实TCP/IP协议族已经帮我们 ...
- LiteOS学习笔记-5通信模组之LiteOS的SAL及socket编程
LiteOS学习笔记-5通信模组之LiteOS的SAL及socket编程 一.SAL套接字抽象层 二.Socket套接字简介 Socket概述 Socket结构体 字节序转换函数 ip地址的转换 字节 ...
- 【学习笔记】在windows下进行基于TCP的本地客户端和服务端socket通信
文章目录 socket介绍 java中使用socket 基于tcp的socket通信 使用ServerSocket类创建一个web服务器:(java) windows下的基于tcp的socket编程( ...
- Socket通信---网络通信学习笔记(一)
两台计算机进行通信的基本前提: (1)IP地址: 每台计算机都有自己独一无二的IP地址,根据IP地址判断与哪台计算机进行通信. (2)端口号: 每个应用程序都有自己专属的端口,根据端口号判断与计算机中 ...
- python中socket模块常用吗_python网络学习笔记——socket模块使用记录
此文章记录了笔者学习python网络中socket模块的笔记. 建议初次学习socket的读者先读一遍socket模块主要函数的介绍. socket模块的介绍可以参考笔者的前一篇关于socket官方文 ...
- Flash Socket通信的安全策略问题
弄了半天没有解决,在ide里发布没为,放到web上就安全问题.哎 记个笔记:虽然还没有搞定. 参考文章 flash xmlsocket policy 问题 Policy file changes in ...
- java socket分包粘包 代码_分享java中处理socket通信过程中粘包情况的实例代码
本篇文章主要介绍了java中处理socket通信过程中粘包的情况,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 这两天学习了java中处理socket通信过程中粘包的情况,而且很重要,所以,今天添 ...
- 雅马哈机械手程序 程序里有跟相机Socket通信数据处理,此流程为锁螺丝
雅马哈机械手程序 程序里有跟相机Socket通信数据处理,此流程为锁螺丝,对每个螺丝位置进行拍照定位补偿,托盘定义里也设计到 9212615053398703咸鱼也有梦想@@
最新文章
- JAVA基础16-Java匿名内部类
- exe4j生成可执行程序的使用方法
- 教你用 3 台机器搞定一个 Redis 高可用架构
- java做报表_一步一步使用POI做java报表
- 分布式缓存 Redis 集群搭建,这里一次性帮你搞定!
- 分析ARP***与欺骗
- 信号量 Linux函数 semget();semctl();semop();
- 通过android手机内置GPS获取平面直角坐标和高斯坐标的原理(附代码)
- KBQA-Bert学习记录-CRF模型
- PHP生成二维码与识别二维码
- 上传,修改头像的使用
- html5获取经纬度页面,html5获取经纬度
- 在校生学习云计算HCIE难吗?好就业吗?
- dell g16 xianka
- 遇见狂神书说:JavaWeb保姆级教程
- JavaScript 进阶 35 -- 构造函数、原型对象、实例之间的关系详解
- 网络交互实验实验总结
- Java 压缩/混淆 JavaScript 代码
- gitlab+jenkins 利用webhook自动构建代码
- CSU-ACM2017暑假集训比赛1 B - R2D2 and Droid Army