socket python3 getsockname conexion python windows ubuntu udp sendto

python3 - Python sendto() no funciona en 3.1(funciona en 2.6)



socket en python3 (2)

Por alguna razón, lo siguiente parece funcionar perfectamente en mi máquina ubuntu ejecutando Python 2.6 y devuelve un error en mi caja windows xp ejecutando python 3.1

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))

A continuación se muestra el error que arroja el pitón 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)

He consultado la documentación de Python 3.1 y Sendto () solo requiere dos parámetros. ¿Alguna idea de lo que puede estar causando esto?


En Python 3, el argumento de cadena (primero) debe ser de tipo bytes o búfer, no str. Obtendrá ese mensaje de error si proporciona el parámetro de banderas opcionales. Cambiar datos a:

d ata = b''UDP Test Data''

Es posible que desee presentar un informe de error al respecto en el rastreador de errores de python.org. [EDIT: ya archivado como lo señaló Dav]

...

>>> 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