Python sendto()不适用于3.1(适用于2.6)

Python sendto()不适用于3.1(适用于2.6),python,windows,ubuntu,udp,sendto,Python,Windows,Ubuntu,Udp,Sendto,出于某种原因,以下内容似乎在我运行Python2.6的ubuntu机器上运行得很好,并在运行Python3.1的windows xp机器上返回一个错误 from socket import socket, AF_INET, SOCK_DGRAM data = 'UDP Test Data' port = 12345 hostname = '192.168.0.1' udp = socket(AF_INET,SOCK_DGRAM) udp.sendto(data, (hostname, port)

出于某种原因,以下内容似乎在我运行Python2.6的ubuntu机器上运行得很好,并在运行Python3.1的windows xp机器上返回一个错误

from socket import socket, AF_INET, SOCK_DGRAM
data = 'UDP Test Data'
port = 12345
hostname = '192.168.0.1'
udp = socket(AF_INET,SOCK_DGRAM)
udp.sendto(data, (hostname, port))
下面是python 3.1抛出的错误:

Traceback (most recent call last):
  File "sendto.py", line 6, in <module>
    udp.sendto(data, (hostname, port))
TypeError: sendto() takes exactly 3 arguments (2 given)
回溯(最近一次呼叫最后一次):
文件“sendto.py”,第6行,在
发送到(数据,(主机名,端口))
TypeError:sendto()只接受3个参数(给定2个)

我查阅了python 3.1的文档,sendto()只需要两个参数。关于是什么导致了这种情况,有什么想法吗?

Python bugtracker上的相关问题:

在Python 3中,字符串(第一个)参数的类型必须是bytes或buffer,而不是str。如果提供可选的flags参数,您将收到该错误消息。将数据更改为:

d
ata=b'UDP测试数据'

您可能希望在python.org bug tracker上提交一份关于该问题的bug报告。[编辑:已按照Dav的说明提交]

>数据='UDP测试数据'
>>>发送到(数据,(主机名,端口))
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
TypeError:sendto()只接受3个参数(给定2个)
>>>发送到(数据,0,(主机名,端口))
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
TypeError:sendto()参数1必须是字节或缓冲区,而不是str
>>>数据=b'UDP测试数据'
>>>发送到(数据,0,(主机名,端口))
13
>>>发送到(数据,(主机名,端口))
13

谢谢!bugtracker上的解释最初没有多大意义,但我现在理解它需要字节或缓冲区的数据类型。感谢您的回复!我应该遵循您的方法,了解到它需要字节或缓冲区的数据类型。非常感谢!
>>> data = 'UDP Test Data'
>>> udp.sendto(data, (hostname, port))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: sendto() takes exactly 3 arguments (2 given)
>>> udp.sendto(data, 0, (hostname, port))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: sendto() argument 1 must be bytes or buffer, not str
>>> data = b'UDP Test Data'
>>> udp.sendto(data, 0, (hostname, port))
13
>>> udp.sendto(data, (hostname, port))
13