【问题标题】:trying to receive data from remote device using udp socket尝试使用 udp 套接字从远程设备接收数据
【发布时间】:2019-12-14 11:21:47
【问题描述】:

我正在尝试向远程设备发送命令:E5071C ENA Vector Network Analyzer

这些是我的问题:

  • 当我尝试从套接字发送和接收数据时,它“挂起”。

  • 我不确定应该使用哪种类型的套接字。

对于其他命令,我使用了s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM),但我只需要在这些情况下发送数据。这里我需要发送接收数据。我试过像这样使用while Trueloop:

while True:
    s.settimeout(1)
    print(sys.stderr, 'waiting for a connection')
    connection, client_address = s.accept()
    try:
        print(sys.stderr, 'client connected:', client_address)
        while True:
            data = connection.recv(1024)
            print(sys.stderr, 'received "%s"') % data
            if data:
                connection.sendall(data)
            else:
                break
    finally:
        connection.close()

我也无法通过 while 循环获得我想要的结果,所以这就是我目前所拥有的:

## import modules
## for loop iterations
## commands sent to remote device using UDP socket

def is_hanging(host, port):
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((host,port))
    min_msg = ':CALCulate:SELected:MARKer:FUNCtion:TYPE MINimum'
    s.send(min_msg.encode())
    s.settimeout(1)
    try:
        s.recv(1024)
        print("Received data!")
        return True
    except socket.timeout as e:
        print(e)
        return False
    finally:
        s.close()

if is_hanging('10.5.33.16',5025) is True:
    pass
else:
    raise Exception("Could not receive data.")

我不完全确定s.recv 是如何工作的,但我希望/期望的是我发送到远程设备的数据会生成一个回复给我的响应。 现在它只是挂起。

【问题讨论】:

    标签: python python-3.x sockets tcp


    【解决方案1】:

    socket.accept() 仅与配置为侦听套接字的基于流的套接字上下文相关。在数据报套接字上使用没有意义,尤其是已经与远程主机关联的数据报套接字。

    (你确定SOCK_DGRAM——即UDP——在这里是正确的吗?我使用过的大多数SCPI设备都使用TCP,即SOCK_STREAM。)

    如果您确定您使用的是正确的协议,请移除对s.accept() 的调用,并在现有套接字s 上调用.recv()

    【讨论】:

    • 我将另外两个命令发送到数据报套接字,应该以同样的方式发送这个吗?我的问题是尝试接收数据。我应该为此使用 TCP 还是 UDP 套接字?
    • 您确定设备在 UDP 套接字上侦听吗?你有这个设备的一些文档的链接吗?
    • 这里是设备的链接:[keysight.com/en/pdx-x202270-pn-E5071C/…我很确定设备正在侦听 UDP 套接字,因为其他命令可以与设备交互。我使用SOCK_DGRAM 发送其他命令。
    • The information in the manual 表示您应该在端口 5024 或 5025 上使用 TCP。我在任何地方都没有看到对端口 20850 的任何引用。
    • 不,您仍在尝试发送 UDP 数据报,设备将忽略该数据报。
    猜你喜欢
    • 2013-03-23
    • 1970-01-01
    • 1970-01-01
    • 2013-03-18
    • 1970-01-01
    • 2021-08-03
    • 1970-01-01
    • 2015-11-28
    • 2015-11-26
    相关资源
    最近更新 更多