【发布时间】:2016-04-07 05:23:13
【问题描述】:
我正在尝试编写一个 python 脚本,它将在 Ubuntu MATE(在 Odroid XU-4 上运行)上侦听 UDP(任意端口 1234)。为此,我找到了使用 python 模块socket 建立连接并通过它进行通信的代码。代码如下:
import socket
port = 1234
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
try:
s.bind(("localhost", port))
except socket.error , msg:
print 'Bind failed. Error Code : ' + str(msg[0]) + ' Message ' + msg[1]
print 'Socket bind complete'
print "waiting on port:", port
while 1:
data, addr = s.recvfrom(1024)
print data
此代码不是我自己编写的,但非常简单。通过终端运行此脚本不会产生错误消息。根据输出,套接字已创建并且连接成功。我遇到的麻烦是,我从中得到的教程说要与这个脚本通信,通过新终端打开客户端连接就可以了。比如:
-$ ncat localhost 1234 -u
仍然没有错误消息。一旦我尝试提交数据包(纯文本,例如“test”),我就会收到错误消息:
Ncat: Connection refused.
为了对自己进行故障排除,我运行了一个单独的终端窗口来监控所有具有 root 访问权限的 UDP 连接。
netstat -u
在运行脚本时,我假设在netstat 列表中找到端口 1234,但我没有。这意味着 python 脚本没有成功创建并绑定到 UDP 端口 1234,但它认为是。
但是,直接通过终端使用netcat 打开相同的 UDP 端口是可行的。
由此,我知道问题一定与python脚本有关。脚本/python 端不建立连接可能有什么问题,但认为它确实建立了连接?
提前致谢!
【问题讨论】:
标签: python linux sockets networking