python Socket发送ascii命令并接收响应

时间:2012-08-28 21:40:23

标签: sockets python-3.x

我正在尝试通过网络建立与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()

2 个答案:

答案 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时它会阻塞,所以你永远不会向你的设备发送任何东西。