Python发送UDP p

2024-06-16 10:21:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图编写一个程序来发送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))

如果我在打印的东西周围加上括号,它就会在屏幕上打印出来。

我需要做什么才能让这工作?


Tags: httpsorg程序ipmessagetargetportwiki
3条回答

如果您运行的是python 3,那么您需要将print语句更改为print函数,即在print语句后面放上括号()中的内容。

您将看到上面所做的唯一事情是打印,除非您有监听信息,因为您正在发送数据包而不是接收数据包,所以您需要首先在另一个控制台窗口中实现并启动示例的另一部分,以便它正在等待消息。

您的代码对我来说工作正常。我在Linux上使用netcat来验证这一点。

使用netcat,我可以做nc -ul 127.0.0.1 5005,它将在以下位置侦听数据包:

  • 防护等级:127.0.0.1
  • 端口:5005
  • 协议:UDP

也就是说,这是我在运行netcat时运行脚本时看到的输出。

[9:34am][wlynch@watermelon ~] nc -ul 127.0.0.1 5005
Hello, World!

对于Python3x,需要将字符串转换为原始字节。必须将字符串编码为字节。通过网络你需要发送字节而不是字符。这对Python 2x是正确的,因为在python2x中,socket上的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))

相关问题 更多 >