我正在编写用于测试UDP吞吐量的脚本,并且遇到了这篇文章:
https://blog.cloudflare.com/how-to-receive-a-million-packets/
我有两台服务器在x86_64硬件上运行CentOS 7.4,并且都安装了Python 3.4。
我可以使用recvmsg
方法启动/监听“服务器”,但是,我遇到了客户端和sendmsg
方法的多个错误。
最初,我收到了这个错误:
# python3.4 ~/scripts/udp_send.py
Connecting...
Traceback (most recent call last):
File "~/scripts/udp_send.py", line 14, in <module>
fd.sendmsg(["\x00" * 32] * 1024)
TypeError: 'str' does not support the buffer interface
经过一番挖掘,我修改了代码以将字符串编码为字节,但后来遇到了这个错误:
# python3.4 ~/scripts/udp_send.py
Connecting...
Traceback (most recent call last):
File "~/scripts/udp_send.py", line 15, in <module>
data = packet.encode()
AttributeError: 'list' object has no attribute 'encode'
我发现有一个帖子必须在列表的[0]
元素上调用encode。所以我尝试了,然后看到了这个错误:
# python3.4 ~/scripts/udp_send.py
Connecting...
Traceback (most recent call last):
File "~/scripts/udp_send.py", line 16, in <module>
fd.sendmsg(data)
TypeError: 'int' does not support the buffer interface
我是Python的新手(来自Perl),这是我第一次尝试套接字编程。
很乐意提供所需的任何其他信息。
提前感谢您提供意见。
答案 0 :(得分:0)
我能够通过更多代码更改来解决这个问题:
packet = ["\x00" * 32] * 64
然后我编码为:
packet = packet[0].encode()
然后我可以使用
发送数据包 fd.sendmsg([packet])
如果我最初在方括号[
]
中附上“数据包”,这本来就有用了。
希望有人觉得这很有帮助。