我是 python 的新手,也是套接字编程的新手。
我对 socket.recvfrom()
和 socket.recv()
感到困惑
我知道通常对于 UDP,人们使用 recvfrom()
而对于 TCP,人们使用 recv()
。
例如,
serverSocketUDP = socket(AF_INET, SOCK_DGRAM)
serverSocketTCP = socket(AF_INET, SOCK_STREAM)
#... define server...
#...
message, clientAddress = serverSocketUDP.recvfrom(2048) #why 2048 for UDP? Ive seen several examples like this.
message2 = serverSocketTCP.recv(1024) #Again, why 1024 for TCP?
如上例所示,我感到困惑的是数字。为什么 2048 和 1024 用于不同的协议?这些数字代表什么?请解释。我希望我足够清楚。谢谢你。
原文由 user859385 发布,翻译遵循 CC BY-SA 4.0 许可协议
为什么 2048 和 1024 用于不同的协议?
这些是非常随意的数字,取决于正在实施的协议。即使 TCP 号码有效,您提供的 UDP 号码也很可能是错误的。
TCP 实现了一种流协议,您可以读取任何大小的数据块。你可以做
recv(1)
一次获取一个字节,或者recv(100000)
如果你想抓取大块。recv
可以免费返回您要求的较小块,因此您可能会得到与您想要的不同的大小。 1024 非常小,您可以毫无问题地读取更大的块。UDP 实现消息协议。您必须要求足够的字节来覆盖整个消息,否则它将被丢弃。该大小取决于协议。协议将消息限制为 1500(标准以太网数据包的最大大小)是很常见的,但它可以是任何高达 65535 的消息。检查实际协议规范以了解最大值。