Python + netcat,只有第一条消息通过 UDP 发送
Python + netcat, only the first message is sent over UDP
我有这段代码充当 UDP 客户端:
import socket
data = "Hello world!"
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
print 'sending %s to 127.0.01:9000', data
sent = sock.sendto(data, ('127.0.0.1', 9000))
print 'sent: %s' % sent
sock.close()
下面是我的 "server":
nc -u -l 127.0.0.1 9000
此示例有效...但只有一次。当我第一次 运行 我的脚本时,我将我的消息发送到服务器(一切都在同一台机器上完成)并看到 "Hello world" 被打印出来。都好。当我第二次 运行 我的脚本时,我没有看到第二个 hello world。
请注意,由于我无法控制的情况,我使用的是 Python 2.6。
这是怎么回事?是否有需要刷新的缓冲区?
当我 运行 来自 Python 运行 时间环境的代码时会发生以下情况(不,netcat 中的结果不会改变):
Python 2.6.6 (r266:84292, Aug 9 2016, 06:11:56)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-17)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import socket
>>> sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
>>> sent = sock.sendto("Hello world!", ('127.0.0.1', 9000))
>>> print sent
12
>>> sock.close()
检查一下:http://www.markhneedham.com/blog/2013/07/30/netcat-strange-behaviour-with-udp-only-receives-first-packet-sent/ 它解释了正在发生的事情。
好的。停止使用 netcat 来测试您的代码。
请改用此代码:
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind(('127.0.0.1', 9000)) # (host, port) because AF_INET
print("Listening...")
while True:
print(sock.recv(15)) # buffer size
您可以根据自己的情况更改主机、端口和缓冲区大小。
我有这段代码充当 UDP 客户端:
import socket
data = "Hello world!"
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
print 'sending %s to 127.0.01:9000', data
sent = sock.sendto(data, ('127.0.0.1', 9000))
print 'sent: %s' % sent
sock.close()
下面是我的 "server":
nc -u -l 127.0.0.1 9000
此示例有效...但只有一次。当我第一次 运行 我的脚本时,我将我的消息发送到服务器(一切都在同一台机器上完成)并看到 "Hello world" 被打印出来。都好。当我第二次 运行 我的脚本时,我没有看到第二个 hello world。
请注意,由于我无法控制的情况,我使用的是 Python 2.6。
这是怎么回事?是否有需要刷新的缓冲区?
当我 运行 来自 Python 运行 时间环境的代码时会发生以下情况(不,netcat 中的结果不会改变):
Python 2.6.6 (r266:84292, Aug 9 2016, 06:11:56)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-17)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import socket
>>> sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
>>> sent = sock.sendto("Hello world!", ('127.0.0.1', 9000))
>>> print sent
12
>>> sock.close()
检查一下:http://www.markhneedham.com/blog/2013/07/30/netcat-strange-behaviour-with-udp-only-receives-first-packet-sent/ 它解释了正在发生的事情。
好的。停止使用 netcat 来测试您的代码。 请改用此代码:
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind(('127.0.0.1', 9000)) # (host, port) because AF_INET
print("Listening...")
while True:
print(sock.recv(15)) # buffer size
您可以根据自己的情况更改主机、端口和缓冲区大小。