gpt4 book ai didi

python - 通过 Python 的 UDP 通信不会创建事件的 Internet 连接

转载 作者:太空宇宙 更新时间:2023-11-04 10:38:07 24 4
gpt4 key购买 nike

我正在尝试编写一个 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

这段代码不是我自己写的,但是非常简单。通过终端运行此脚本不会产生任何错误消息。根据输出,socket创建成功,连接成功。我遇到的麻烦是我从中得到的教程说要与这个脚本通信,通过新终端打开客户端连接就可以了。像这样的东西:

-$ ncat localhost 1234 -u

同样没有错误信息。一旦我尝试提交数据包(纯文本,例如“测试”),我就会收到错误消息:

Ncat: Connection refused.

为了解决自己的问题,我运行了一个单独的终端窗口来监控所有具有根访问权限的 UDP 连接。

netstat -u

在运行脚本时,我假设在 netstat 列表中找到端口 1234,但我没有。这意味着 python 脚本没有成功创建和绑定(bind)到 UDP 端口 1234,但它认为是。

但是,直接通过终端使用 netcat 打开相同的 UDP 端口是可行的。

由此,我知道问题一定与python脚本有关。脚本/python 端不建立连接但认为它建立连接可能有什么问题?

提前致谢!

最佳答案

首先您可以检查端口是否打开/关闭,然后进行绑定(bind)。这可能对您有所帮助:

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"

关于python - 通过 Python 的 UDP 通信不会创建事件的 Internet 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36467346/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com