[学习笔记] Windows和Linux下Socket编程中select的应用

English Version:  https://today2tmr.com/en/2017/06/30/study-note-select-in-socket-for-windows-and-linux/

基本概念

I/O模型

系统处理I/O的模型,I/O即send和recv

同步/异步(针对客户端)

  • 同步: 一件一件事做。 在功能调用(向服务端提交请求)未得到结果前,调用不返回。
  • 异步: 调用功能后客户端即可做其他事情,得到结果时收到通知。
  • 区别:  客户端访问数据时进程是否阻塞

阻塞/非阻塞(针对服务端)

  • 阻塞: 调用结果返回之前,线程进入休眠状态。(如recv函数)
  • 非阻塞: 不能立即得到结果的情况下,立即返回。当有结果时用select通知客户端回调。
  • 区别:  服务端是否立即返回

Continue reading “[学习笔记] Windows和Linux下Socket编程中select的应用”

网络编程之socket学习笔记

English Version: https://today2tmr.com/en/2017/06/29/network-programming-socket-learning-note/

由于初学,目的导向为理解,笔记将偏向于浅显而缺乏深度。

基本概念

  • 我们通常用IP和端口号去定位一个网络服务。
  • socket就想是电话线的两头,一旦电话接通,通讯就开始了。
  • 有三种形式的sockets,我们讨论其中的两种:
    • 流式套接字 SOCK_STREAM(TCP)
    • 数据包套接字 SOCK_DGRAM (UDP)

TCP与UDP的对比

  • 流式套接字 SOCK_STREAM(TCP)
    • 面向连接,数据正确性高,效率较低。
    • 服务端与客户端建立一对一连接,每次信息传递均有正确性校验,保证数据准确到达目的地。
  • 数据包套接字 SOCK_DGRAM (UDP)
    • 无连接,数据可能丢失,高效率。
    • 服务端和客户端均只需1个套接字。就像快递站,填写邮寄信息即可向任一地点发货。
    • 如语音、视频通话同网络通讯通常采用UDP以获得高效传播速率,偶尔的数据丢失也不会造成大的影响。

Continue reading “网络编程之socket学习笔记”