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

注:图片来自《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协议详解卷二吃透了能称得上?



更多文章
  • ufw简明教程
  • zerotier简明教程
  • 提取kindle笔记
  • 一个Golang gRPC握手错误的坑
  • Golang(Go语言)爬虫框架colly简明教程及源码阅读与分析
  • 选择合适的技术栈
  • Golang的template(模板引擎)简明教程
  • 毕业三年,一路走来
  • 代码的坏味道
  • 消息分帧(字符串设计或协议设计)的两种形式
  • C, Go, Python的错误处理和异常机制杂谈
  • 好的命名是最好的文档
  • 读《系统之美:决策者的系统思考》
  • Linux高分屏支持
  • GCC默认的头文件搜索路径