分类: LINUX
2014-12-02 17:47:38
最近看到项目组有一个问题单,是关于TCP通信的。
项目背景:私有云项目,大体涉及三个端。控制端C,可理解为手机APP;设备端B,可理解为家里的智能热水器;服务器A,可理解为把控制端C的指令,如烧水指令发送到设备端B的中转站。
问题描述:服务器A和设备B通过TCP进行通信,测试人员说在用控制端通过服务器A向设备B发指令后,把服务器A和设备B之间的网线拔了,设备B没有执行服务器A的指令。
解释:设备B的开发人员说没有收到服务器A的指令,服务器A的开发人员说指令已经发了,因为send没有返回错误信息。
问题:这条消息到哪儿去了?这到底算哪个端的bug?
明眼人一看就知道这应该算服务器端A的bug,因为它并没有检测TCP连接的对端是否掉电或者断网,没有处理这种异常。
这里分享一下我个人学习网络编程的心得和总结。
1. 需要静心看书
理论推荐看《TCP/IP 详解 卷一》,编程接口推荐看《UNIX网络编程 卷一》,以我个人的感受来说,二者缺一不可,需要交叉着阅读和思考。比如三次握手,理论看《TCP/IP 详解 卷一》,编程接口看《UNIX网络编程 卷一》,三次握手对应那些系统调用,何时表示三次握手已经建立。
2. 需要多动手实践
写代码没有什么捷径,多读,多思考,多动手。