我正在尝试通过网络建立与ADAM-4017 + I / O模块的连接,使用Lantronix EDS2100模块通过python中的套接字通信。对于我的生活,我无法让它发挥作用。
EDS具有IP地址和adam设备连接的端口(10001)。我正在尝试向adam查询ch 1的值(ascii命令是#000)
非常感谢任何帮助:
import socket
edsIP = "192.168.1.135"
edsPORT = 10001
MESSAGE="#000\r"
srvsock = socket.socket( socket.AF_INET, socket.SOCK_STREAM)
srvsock.bind( ('',23000))
srvsock.listen(1)
newsock, (remhost, remport) = srvsock.accept()
srvsock.send((MESSAGE),(edsIP, EdsPORT) )
while 1:
data, addr = srvsock.recv(4096)
print ("received message:", data,addr)
srvsock.close()
答案 0 :(得分:1)
我对此设备一无所知,但是根据您的描述,您说它希望在端口10001上建立连接。但您在代码中所做的是打开自己的套接字并侦听端口23000上的连接,然后等待连接。如果你不希望有什么东西可以连接到你,那么你将无缘无故地等待。
如果您的所有设备都需要连接并发送消息,那么我认为这样做:
import socket
edsIP = "192.168.1.135"
edsPORT = 10001
MESSAGE="#000\r"
srvsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
srvsock.settimeout(3) # 3 second timeout on commands
srvsock.connect((edsIP, edsPORT)))
srvsock.sendall(MESSAGE)
data = srvsock.recv(4096)
print "received message:", data
srvsock.close()
更新
您的评论建议您使用python3。如果是这样,您可能需要调整代码:
MESSAGE=b'#000\r'
当您收到bytes
回复时,如果您想将其转换为字符串:
print data.decode("UTF-8")
答案 1 :(得分:0)
我能直接看到的唯一问题是你用一个空格缩进了while语句,但这可能只是在这里剪切和粘贴。
经过一些测试很明显,当你尝试接受serversocket时它会阻塞,所以你永远不会向你的设备发送任何东西。