【1】了解socket

套接字理解

  1. socket学习 == 计算机之间如何通信
  2. socket 的原意是“插座”,在计算机通信领域,socket 被翻译为“套接字”,它是计算机之间进行通信的一种约定或一种方式。通过 socket 这种约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送数据。 网络编程就是用代码将两台电脑交换数据,操作系统提供了socket来编写传输程序,不同的硬件设备都被看成一个文件,每个文件linux会给它分配一个id,即文件描述符,
    通过socket来创建一个网络连接,即 打开一个网络文件,socket()返回值就是文件描述符,
  3. 套接字有多种,我们常用的是internal套接字, internal套接字分为多种数据传输方式,常用的两种
  4. 两台套接字之间的通信,相当于两个套接字间的通信;

流格式套接字 (面向连接套接字)

 (Strem Sockets) 用SOCK_STREAM表示 小写sock_stream

 【1】特征:
  • 数据在传输过程中不会消失
  • 数据是按照顺序传输的;
  • 数据的发送和接收不是同步的;

  【2】理解

  • 流格式套接字的内部有一个缓冲区(也就是字符数组),通过 socket 传输的数据将保存到这个缓冲区。接收端在收到数据后并不一定立即读取,只要数据不超过缓冲区的容量,接收端有可能在缓冲区被填满以后一次性地读取,也可能分成好几次读取。
  • 传送端有自己的节奏,接收端也有自己的节奏,它们是不一致的。http 协议就基于面向连接的套接字
  • TCP(传输控制协议)会控制你的数据按照顺序到达没有错误,保证数据的正确性;
  • IP(网络协议)会控制数据如何从源头到达目的地,即路由;

  【3】总结

  • SOCK_STREAM 是一种可靠的、双向的通信数据流,数据可以准确无误地到达另一台计算机,如果损坏或丢失,可以重新发送。

 数据报格式套接字(无连接套接字)

(Datagram Sockets) 用SOCK_DGRAM表示     小写sock_dgram

  【1】特征
      1.强调快速传输而非传输顺序;
      2.传输的数据可能丢失也可能损毁;
      3.限制每次传输的数据大小
      4.数据的发送和接收是同步的;
  【2】理解
      1.数据报套接字也使用 IP 协议作路由,但是它不使用 TCP 协议,而是使用 UDP 协议(User Datagram Protocol,用户数据报协议)
      2.计算机只管传输数据,不作数据校验,如果数据在传输中损坏,或者没有到达另一台计算机,是没有办法补救的。也就是说,数据错了就错了,无法重传。
  【3】总结
      1.数据报套接字是一种不可靠的、不按顺序传递的、以追求速度为目的的套接字。

 总结

  • 无连接套接字传输效率高,但是不可靠,有丢失数据包、捣乱数据的风险;
  • 有连接套接字非常可靠,万无一失,但是传输效率低,耗费资源多。

  

做一个优秀的程序媛
原文地址:https://www.cnblogs.com/oytt/p/13534870.html