1

我正在尝试通过 python 中的套接字通信使用 Lantronix EDS2100 模块通过网络建立与 ADAM-4017+ I/O 模块的连接。对于我的一生,我无法让它发挥作用。

EDS 有一个 IP 地址和一个与亚当单元相连的端口 (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()
4

2 回答 2

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")
于 2012-08-28T21:48:47.173 回答
0

我可以直接看到的唯一问题是您将 while 语句缩进了一个空格,但这可能只是在这里剪切和粘贴。

经过一些测试很明显,当您尝试在服务器套接字上接受时,它会阻塞,因此您永远不会向您的设备发送任何内容。

于 2012-08-28T21:43:39.987 回答