【发布时间】:2014-04-02 17:52:34
【问题描述】:
我正在尝试通过 UDP 发送数据,并想知道为什么我的系统 (Mac OS X 10.9) 上的最大数据长度限制为 9253 字节。
这是我发送数据的方式(简化):
import socket
UDP_IP = "127.0.0.1"
UDP_PORT = 9999
MESSAGE = "A"*9217
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.sendto(MESSAGE, (UDP_IP, UDP_PORT))
我得到了错误
Traceback (most recent call last):
File "Untitled 2.py", line 8, in <module>
sock.sendto(MESSAGE, (UDP_IP, UDP_PORT))
socket.error: [Errno 40] Message too long
事实上,我可以传输的最大“字符串长度”是 9216。当我在客户端通过字节大小检查时
import socket
UDP_IP = "127.0.0.1"
UDP_PORT = 9999
self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
self.sock.bind((UDP_IP, UDP_PORT))
data, addr = self.sock.recvfrom(65535)
print("Received {0} bytes of data.".format(sys.getsizeof(data)))
我明白了
Received 9253 bytes of data.
我不明白为什么它是 9253 字节长,当我发送 9216 字节时(这是以字节为单位的字符串长度)。 28个字节是UDP头,剩下的9个字节存储的是什么?
我的主要问题是:如何发送和接收最多 65535 字节的 UDP 数据包?
【问题讨论】: