Python 3.4套接字编程错误

时间:2018-03-21 15:43:30

标签: sockets python-3.4

我正在编写用于测试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),这是我第一次尝试套接字编程。

很乐意提供所需的任何其他信息。

提前感谢您提供意见。

1 个答案:

答案 0 :(得分:0)

我能够通过更多代码更改来解决这个问题:

packet = ["\x00" * 32] * 64

然后我编码为:

packet = packet[0].encode()

然后我可以使用

发送数据包

fd.sendmsg([packet])

如果我最初在方括号[ ]中附上“数据包”,这本来就有用了。

希望有人觉得这很有帮助。