Socket的理解

什么是Socket

在计算机中Socket被翻译为“套接字”,是计算机之间进行通信的一种约定或方式

通过这种约定,一台计算机可以向其他计算机接收和发送数据

不同系统下的Socket

UNIX/Linux

Socket返回的是一个文件描述符(File Descriptor)

UNIX/Linux 中的一切都是文件,网络连接也是一个文件

有了文件描述符就可以使用普通的文件操作函数来传输数据了,也就是说建立网络连接之后剩下的就是普通文件操作,不区分socket和文件

Windows

Socket返回的是一个文件句柄(File handle)

但是会区分socket和文件,Windows会把socket当作一个网络连接,需要调用专门针对socket设计的数据传输函数,针对普通文件的输入输出函数就无效了

套接字的类型

套接字类型有很多,其中DARPA Internet(Internet套接字)是最常用的

根据数据的传输方式,将Internet套接字分成流格式套接字(SOCK_STREAM)数据报格式套接字(SOCK_DGRAM)

因此,当我们通过socket()函数创建连接时,必须在里面说明使用哪种数据传输方式

流格式套接字(SOCK_STREAM)

流格式套接字是一种可靠的双向的通信数据流,数据在运输中如果损坏丢失了,可以重新发送,其有自己的纠错机制

有以下几个特征:

  • 数据在传输过程中不会消失
  • 数据是按照顺序传输的
  • 数据的发送和接收不是同步的(不存在数据边界)

由于其采用的是TCP协议(The Transmission Control Protocol,传输控制协议),就保证了数据按照顺序到达并且没有错误

流格式套接字内部有一个字符数组缓冲区,通过socket传输的数据会被保存到这个缓冲区,接收端在收到数据后并不一定立即读取,只要数据不超过缓冲区的容量,接收端有可能在缓冲区被填满以后一次性读取,也有可能分成好几次进行读取。即发送和接收的节奏不一定是一致的,接收端只需要根据自己的要求读取

补充:

TCP/IP协议:TCP 用来确保数据的正确性,IP(Internet Protocol,网络协议)用来控制数据如何从源头到达目的地,也就是常说的“路由”。

数据报格式套接字(SOCK_DGRAM)

数据报格式套接字也叫做“无连接的套接字”,是一种不可靠的不按顺序传递的以追求速度为目的的套接字

这种套接字模式只管传输数据不作数据校验,从而传输效率比流格式高,同时如果数据在传输中丢失错误了是没办法重传补救的

有以下特征:

  • 强调快速传输而非传输顺序
  • 传输的数据可能丢失也可能损毁
  • 限制每次传输的数据大小
  • 数据的发送和接收时同步的(存在数据边界)

数据报套接字使用的是 UDP 协议(User Datagram Protocol,用户数据报协议),也使用IP协议作路由

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值