理解TCP的写操作
对 TCP 连接使用写操作时,最好将写操作理解成将数据复制到发生队列,并通知 TCP 此队列中有新数据的一种操作。实际上,写操作返回时,写操作写出的部分或全部数据可能还在排队等待传输,所以,此时不管是主机还是对等应用程序崩溃了,数据都会丢失
要认识到TCP是一个可靠的,但并不绝对可靠的协议
我们会误以为只要基于 TCP 编程,那么通信的数据必然能够到达对端主机,毕竟 TCP 是可靠的传输协议。然而, TCP 是处在传输层的协议,其可靠性只针对传输层,但是消息最终要达到应用层才算有价值。从传输层到应用层的消息会不会出现问题,可不由 TCP 来保证
记住:TCP是一种流协议
TCP 是一种流协议,这就意味着数据是以字节流的形式传递给接收者的,没有固有的”报文”或”报文边界”的概念。从这方面来说,读取 TCP 数据就像从串行端口读取数据一样——无法预先得知在一次指定的读调用中会返回多少字节
基本套接字 API 的回顾
网络编程必备的基础 API 应用知识
记住:TCP不是轮询的
TCP 不提供连接丢失即时通知最重要的原因与其主要设计目标之一有关:出现网络故障时维护通信的能力。国防部赞助的一项研究要提供一种即使在发生战争或自然灾害这种严重网络损坏的情况下,也能维护可靠网络通信的网络协议,TCP就是这种研究的产物
理解面向连接和无连接协议之间的区别
它们的本质区别在于,对无连接协议来说,每个分组的处理都独立于所有其他分组,而对面向连接的协议来说,协议实现则维护了与后继分组有关的状态信息
提防对等实体的不友好动作
亦如在程序中接受用户的输入前,要对用户的输入进行“安全检测”,以防止恶意输入破坏应用程序的正常运行。可见,防御性编程在编码中是必备的意识,网络编程中也要考虑各种概率看似很小的事件,做出相应的处理动作
CPP 中 cctype 库的常用方法
通常用于处理字符串中字母、数字、特殊字符,还包括大小写转换
模板元编程的意义
模板元编程可以只需要设计一份代码,传入不同的类型并生成实际的代码,完美解决面向过程和面向对象的不足
为什么在你的进程退出时没有内存泄露?
对于短时间运行的程序,泄露内存通常不会导致任何操作问题(尽管它可能被认为是不好的形式)。如果你编写一个长期运行的服务器(例如 Web 服务器或数据库管理系统,它永远不会退出),泄露内存就是很大的问题,最终会导致应用程序在内存不足时崩溃
115161718