尝试使用udp从远程设备接收数据

2024-04-25 07:32:42 发布

您现在位置:Python中文网/ 问答频道 /正文

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

这些是我的问题:

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

  • 我不知道该用哪种插座。

对于其他命令,我使用了s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM),但我只需要在这些情况下发送数据。这里我需要发送接收数据。我曾尝试使用while True循环,如下所示:

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是如何工作的,但我希望/期望的是,我发送到远程设备的数据会生成一个响应,并发送回我。 现在它只是挂着。你知道吗


Tags: 命令clienttruedata远程isstderrsys
1条回答
网友
1楼 · 发布于 2024-04-25 07:32:42

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

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

如果确定使用了正确的协议,请删除对s.accept()的调用,并在现有套接字s上调用.recv()。你知道吗

相关问题 更多 >

    热门问题