Socket通信——(1)

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.层级架构

图片[1]-Socket通信——(1)-E-元素

把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 服务端编写流程

  1. 调用socket()函数创建一个用于通信的套接字
  2. 给已经创建的套接字绑定个端口号,这一般通过设置网络套接口地址和调用bind0函数来实现。
  3. 调用listen()函数使套接字为一个监听套接字。
  4. 调用accept()函数来接受窄户端的连接,这是就可以和客户端通信了。
  5. 处理客户端的连接请求。
  6. 断开连接。

6.2 客户端编写流程

  1. 调用socket()函数创建一用于通信的套接字。
  2. 通过设置套接字地址结构说明客户端与之通信的服务器的IP地址和端口号。
  3. 调用connect()函数来建立与服务器的连接。
  4. 调用读写函数发送或者接收数据。
  5. 断开连接
图片[2]-Socket通信——(1)-E-元素
© 版权声明
THE END
点赞796 分享
和此文作者聊聊 抢沙发

    暂无评论内容