1

SAAT-520Wireless-Communication-Programming-Development-Protocol我一直在尝试向我的 RFID 发送低级命令以获取设备信息。我正在使用wireshark点击连接,它看起来很好,因为数据包似乎从我的PC到RFID设备,反之亦然。

但是我在我的程序上看不到任何响应或输出。在设备说明上我有响应命令,我不确定我应该和/或在哪里可以使用命令响应。

Import socket

TCP_IP = '192.168.0.238'
TCP_PORT = 7086
BUFFER_SIZE = 20
MESSAGE = '0x55, 0x00~0xFF, 0x01, 0x00, 0x00~0xFF'

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
    s.connect((TCP_IP, TCP_PORT))
except:
    print ('failed' + TCP_IP, 'down')
s.sendall(MESSAGE)
data = s.recv(BUFFER_SIZE)
s.close()
print 'received', repr(data)

我不明白为什么我的程序没有响应。没有错误,程序也没有成功。只是过程永无止境。

另请参阅附件中的命令说明。

系统信息查询命令(0x01H)

图像1

命令响应

img2

4

1 回答 1

0

(从你的问题)

s.sendall(MESSAGE)
data = s.recv(BUFFER_SIZE)
s.close()

您正在通过 send 发送数据,立即请求响应数据,然后关闭套接字。没有足够的时间让您得到回复。对于测试,请尝试在两者之间放置一个时间延迟。

import time
s.sendall(MESSAGE)
time.sleep(5)
data = s.recv(BUFFER_SIZE)
print(data)
s.close()

您也可以等待传入的数据;

import time
s.sendall(MESSAGE)
while data is None:
    data = s.recv(BUFFER_SIZE)
    print "No data, waiting...."
    time.sleep(0.5)

print "Data arrived"
incoming = data.decode('utf-8')
print incoming
# Process Data

如果我的缓冲区太小,我个人确实遇到了问题——我必须捕获超时异常来处理它。也许尝试增加你的缓冲区大小。

下面是接近我用于我的应用程序的实际代码的内容;它是 python 3.x,你必须稍微调整一下——但它对我有用。

            try:
                data = s.recv(buf_len)
                if data is not None and len(data) > 0:
                    while True:
                        new_data = s.recv(buf_len)
                        if new_data is None or len(new_data) == 0:
                            break
                        data = data + new_data

            except socket.timeout:
                if data is not None and self.callback is not None:
                    logger.debug(f"Received packet: {data}")   

incoming = data.decode('utf-8')
print incoming
# Process Data                 
于 2017-12-07T19:43:44.003 回答