我正在尝试编写一个程序来发送UDP数据包,如 https://wiki.python.org/moin/UdpCommunication中的代码似乎是在Python 2中:
import socket
UDP_IP = "127.0.0.1"
UDP_PORT = 5005
MESSAGE = "Hello, World!"
print "UDP target IP:", UDP_IP
print "UDP target port:", UDP_PORT
print "message:", MESSAGE
sock = socket.socket(socket.AF_INET, # Internet
socket.SOCK_DGRAM) # UDP
sock.sendto(MESSAGE, (UDP_IP, UDP_PORT))
Run Code Online (Sandbox Code Playgroud)
如果我在打印的东西周围加上括号,它只是将它打印在屏幕上.
我需要做些什么来完成这项工作?
Man*_*dey 56
使用Python3x,您需要将字符串转换为原始字节.您必须将字符串编码为字节.通过网络,您需要发送字节而不是字符.你是对的,这适用于Python 2x,因为在Python 2x中,套接字上的socket.sendto采用"普通"字符串而不是字节.试试这个:
print("UDP target IP:", UDP_IP)
print("UDP target port:", UDP_PORT)
print("message:", MESSAGE)
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # UDP
sock.sendto(bytes(MESSAGE, "utf-8"), (UDP_IP, UDP_PORT))
Run Code Online (Sandbox Code Playgroud)
您的代码适用于我.我在Linux上使用netcat来验证这一点.
使用netcat,我可以nc -ul 127.0.0.1 5005在以下位置监听数据包:
话虽这么说,这是我在运行你的脚本时看到的输出,同时运行netcat.
[9:34am][wlynch@watermelon ~] nc -ul 127.0.0.1 5005
Hello, World!
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
104086 次 |
| 最近记录: |