1.原理
1.1什么是Socket?
在计算机通信领域,socket 被翻译为“套接字”它是计算机之间进行通信的一种约定或一种方式。通过 socket 这种约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送数据。
1.2Socket的本质是什么?
本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口。
1.3Socket的作用是什么?
Socket的英文原义是“孔”或“插座”,,通常也称作“套接字”,可以用来实现不同虚拟机或不同计算机之间的通信。
2.应用
2.1典型应用 网页服务器与浏览器
浏览器获取用户输入的URL,向服务器发起请求,服务器分析接收到的URL,将对应的网页内容返回给浏览器,浏览器再经过解析和渲染,就将文字、图片、视频等元素呈现给用户。
https://e-yuansu.com/ 这就是个url,就是链接的意思。
2.2 QQor微信等 聊天工具
本地的QQ和微信程序就是客户端,登录过程就是连接服务器的过程,聊天过程其实就是Socket的发送和接受过程。
3.层级架构
把Socket比作门一-门外是邮局,你要送信就要通过门,把信从门送出去到邮局,然后由邮局帮你送达目标的门,目的地主人再打开门,从门取出邮局送过来的信。
Socket位于应用层与传输层之间所以可以认为上述的比喻中,邮局就是传输层(及更下面的层),而门内就是应用。
4.Socket的编程方式
socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open -> 读写write/rea->关闭close”模式来操作。Socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写I0、打开、关闭),因此Socket也提供了类似于连接发送接受等方法调用。连接(Connect)、关闭连接 (Close)、发送数据、接收数据等方法调用。
5.数据传输方式
5.1 STREAM tcp
表示面向连接的数据传输方式。数据可以准确无误地到达另一台计算机,如果损坏或丢失,可以重新发送,但效率相对较慢。
5.2 DGRAM UDP
表示无连接的数据传输方式。计算机只管传输数据,不作数据校验,DGRAM 所做的校验工作少,所以效率比 SOCK STREAM 高。
QQ 视频聊天和语音聊天就使用 DGRAM 传输数据,因为首先要保证通信的效率,尽量减小延迟,而数据的正确性是次要的,即使丢失很小的一部分数据,视频和音频也可以正常解析,最多出现噪点或杂音,不会对通信质量有实质的影响。
6.服务端与客户端编写流程
6.1 服务端编写流程
- 调用socket()函数创建一个用于通信的套接字
- 给已经创建的套接字绑定个端口号,这一般通过设置网络套接口地址和调用bind0函数来实现。
- 调用listen()函数使套接字为一个监听套接字。
- 调用accept()函数来接受窄户端的连接,这是就可以和客户端通信了。
- 处理客户端的连接请求。
- 断开连接。
6.2 客户端编写流程
- 调用socket()函数创建一用于通信的套接字。
- 通过设置套接字地址结构说明客户端与之通信的服务器的IP地址和端口号。
- 调用connect()函数来建立与服务器的连接。
- 调用读写函数发送或者接收数据。
- 断开连接
暂无评论内容