网络编程所需要熟悉的那些函数

注:图片来自《TCP/IP协议详解卷二:实现》

网络编程函数(recvfrom, sendto, listen, bind, accept等)

我们常用的网络协议栈是TCP/IP协议栈。

从发起连接的角度来看,我们有服务端和客户端,一般来说,我们把主动发起连接的那一方叫做客户端,等待 别人来连接的叫做服务端。

从协议上来讲,分为UDP和TCP。

因此,把上面两种分类组合一下,就有四种,我们来看看它们所需要用到的函数:

  • TCP客户端: socket -> connect -> send|recv -> shutdown|close
  • TCP服务端: socket -> bind -> listen -> accept -> send|recv -> shutdown|close

TCP编程(图片来自geeksforgeeks)

  • UDP客户端: socket -> connect -> recvfrom|sendto -> close
  • UDP服务端: socket -> bind -> recvfrom|sendto -> close

UDP编程(图片来自geeksforgeeks)

此外就是一些高级的函数,主要是I/O多路复用相关的:

  • select
  • pselect
  • poll
  • epoll
  • kqueue

不过,如果你不是用C的话,一般来说语言都已经封装好了,都会在对应的操作系统使用最优的I/O多路复用函数,例如 Linux上使用epoll,FreeBSD上使用kqueue等等。

基本上熟悉以上函数,就可以说得上一句”熟悉网络编程”了,至于精通嘛,估计要把TCP/IP协议详解卷二吃透了能称得上?



更多文章
  • 计算机中的权衡(trade-off)
  • [声明]本站所有文章禁止转载
  • Golang不那么蛋疼的sort
  • Flutter给Android应用签名
  • 使用Gitea+Drone打造自己的CI/CD系统
  • 2019年就要结束啦!
  • 为什么要使用gRPC?
  • Matebook X Pro 2019安装Debian 10
  • ArchLinux忽略某个包的升级
  • SQLAlchemy使用主从与数据库autocommit
  • Blackbox禁用IPv6
  • 预防缓存击穿
  • Go 1.13的errors挺香
  • flutter开发体验汇报
  • 自己封装一个好用的Dart HTTP库