我正在尝试向远程设备发送命令: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
是如何工作的,但我希望/期望的是,我发送到远程设备的数据会生成一个响应,并发送回我。
现在它只是挂着。你知道吗
socket.accept()
仅在配置为侦听套接字的基于流的套接字上下文中相关。在数据报套接字上使用是没有意义的,尤其是已经与远程主机关联的套接字。你知道吗(您确定
SOCK_DGRAM
即UDP在这里是正确的吗?我使用过的大多数SCPI设备都使用TCP,即SOCK_STREAM
。)如果确定使用了正确的协议,请删除对
s.accept()
的调用,并在现有套接字s
上调用.recv()
。你知道吗相关问题 更多 >
编程相关推荐