gpt4 book ai didi

sockets - 套接字协议(protocol)基础

转载 作者:行者123 更新时间:2023-12-04 02:08:43 25 4
gpt4 key购买 nike

最近在看一篇Socket Programming HOWTO以下部分突然出现在我身上:

But if you plan to reuse your socket for further transfers, you need to realize that there is no "EOT" (End of Transfer) on a socket. I repeat: if a socket send or recv returns after handling 0 bytes, the connection has been broken. If the connection has not been broken, you may wait on a recv forever, because the socket will not tell you that there's nothing more to read (for now). Now if you think about that a bit, you'll come to realize a fundamental truth of sockets: messages must either be fixed length (yuck), or be delimited (shrug), or indicate how long they are (much better), or end by shutting down the connection. The choice is entirely yours, (but some ways are righter than others).



本节重点介绍如何编写套接字“协议(protocol)”以传递消息的 4 种可能性。我的问题是,用于实际应用的首选方法是什么?

正如文章或多或少断言的那样,通常最好在每条消息中包含消息大小(大概在标题中)?有没有其他方法更可取的情况?

最佳答案

该决定应取决于您要发送的数据(它是什么,它是如何收集的)。如果数据是固定长度的,那么固定长度的数据包可能是最好的。如果数据可以很容易地(不需要转义)分成分隔实体,那么分隔可能是好的。如果您在开始发送数据 block 时知道数据大小,那么 len-prefixing 可能会更好。如果发送的数据总是单个字符,甚至是单个位(例如“on”/“off”),那么任何不同于固定大小的单个字符消息都会太多。

还要考虑协议(protocol)可能会如何发展。只要不包含 EOL 字符本身,EOL 分隔的字符串就很好。固定长度可能会很好,直到可以使用一些可选部分等来扩展数据。

关于sockets - 套接字协议(protocol)基础,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2368580/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com