本文主要是介绍【网络编程实践】1.2 网络编程注意事项,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
- 应尽量避免将网络编程与业务逻辑穿插在一起。
- 注意TCP连接断开的时机与条件。
因此,在应用层设计时,应考虑到TCP断开时的设计。
(注:close太早可能会导致协议栈发生RST分解,连接重置,导致数据接收不完整。 在阻塞IO中可以使用SO_LINGER选项,但在非阻塞IO中此选项无用)
参考:《Windows网络编程 5.6.4顺序释放连接》
在服务器应用程序读取剩余数据之前,服务器主机的崩溃导致数据丢失,但客户并不知道。
对于面向连接的流式套接字而言,在调用closesocket()时,选项SO_LINGER和SO_DONTLINGER的配置决定了closesocket()的操作过程。这两个选项使得我们可以改变closesocket()的默认配置,要求在用户进程与内核间传递linger结构,声明当调用closesocket()时,如果仍有排队的数据等待发送套接字应当如何处理。) - TCP是字节流格式,只保证字节按顺序到达,但不保留消息的边界。
在应用层中,需要设计实现TCP分包的逻辑(将字节流切分成消息) - 不要直接发送语言中的结构体类型,原因有二:
1)为了考虑对齐,而修改了全局的对齐方式(attribute((packed))),破坏了abi导致第三方库coredump
2)高度不可扩展,如果增加一个字段,则客户端与服务端都需要进行升级。 - TCP自连接问题。
客户端向本机服务端发起连接时,某些条件下可能会出现自连接现象。localhost:54321<->localhost:54321 参考:self-connection
这篇关于【网络编程实践】1.2 网络编程注意事项的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!