【问题标题】:UDP Communication through Python Doesn't Create Active Internet Connection通过 Python 的 UDP 通信不会创建活动的 Internet 连接
【发布时间】: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


    【解决方案1】:

    首先你可以检查端口是否打开/关闭然后绑定。这可能会对您有所帮助:

    import socket;
    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    result = sock.connect_ex(('xxx.xxx.xxx.xxx',1234))
    if result == 0:
       print "Port is open"
    else:
       print "Port is not open"
    

    【讨论】:

    • 我刚刚运行了这个并且端口是打开的。我做了更多的挖掘工作,现在我可以使用 TCP 而不是 UDP 获得此代码的变体。但是我想要UDP。感谢您的建议!
    【解决方案2】:

    它有助于明确定义您希望连接的 IP 地址。例如:

    import socket
    IP = "127.0.0.1"
    port = 1234
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    try:
        s.bind((IP, 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
    

    完成后,通过 netcat 作为客户端连接,如下所示:

    -$ ncat 127.0.0.1 1234 -u
    

    在遇到同样的问题后,这对我有用。

    【讨论】:

      猜你喜欢
      • 2021-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-26
      • 1970-01-01
      相关资源
      最近更新 更多