一. 编程前必备的基础知识:
(1) 网络基础。你必须知道以下几点:
①熟悉TCP/IP协议四层模型,包括物理层、IP层、TCP/UDP层和应用层,熟悉滑动窗口等实现机制。
②我们一般所指的socket编程都是指TCP编程。由于UDP编程比较简单,而TCP的socket编程复杂得多,经常出现各种各样莫名其妙的问题,所以socket编程一般都是指TCP编程,下文如果没有特别说明,也都是指TCP编程。
③TCP与UDP的区别:TCP是面向连接的,除数据流的结尾无法从网络层预知是否全部接收到,中间是不会丢包的,不会丢掉任何一个字节;而UDP是无连接的,丢包是正常现象。
④ TCP是“全双工的字节流”,对这几个字必须要有透彻的理解,否则编程时就是一个马大哈,知其然不知其所以然。关于这几个字的理解,可以参考笔者的另外一篇博客文章“TCP的socket编程中全双工的字节流含义的深刻理解”(http://blog.youkuaiyun.com/waisock2017/article/details/78388380)。
(2) 编程前的基础知识
① socket编程的注意事项,参考笔者的另外一篇博客文章“TCP的socket编程中常见问题及注意事项”(http://blog.youkuaiyun.com/waisock2017/article/details/78448427)
② 阻塞与非阻塞。socket支持阻塞与非阻塞两种工作模式,通常网络上介绍的文章,都是使用默认的阻塞模式的。关于非阻塞模式的介绍,以及函数的各种返回值和各种细节,互联网上无论是国内或国外