Исправлено. См. Ответ на мой вопрос ниже.Интерфейс Python для Alien RFID-считывателя
Я пытаюсь связаться с читателем Alien RFID 9800 через интерфейс TCP/IP с Python 2.7.
Однако прилагаемый тестовый код не выходит за пределы регистрационного имени читателя, и читатель не обрабатывает команду «Получить имя читателя».
Я использую имя пользователя по умолчанию (чужой) и пароль (пароль). Все отлично работает с интерфейсом Alien. Что-то не так с регистрацией входа? Что не так?
import socket
cmdHost, cmdPort = '192.168.1.106', 23
CmdDelim = '\n' # Corrected from '\n\r' to '\n'. Delimiter of Alien commands (sent to reader).
ReaderDelim = '\r\n\0' # Delimiter of Alien reader responses (received from reader).
CmdPrefix = chr(1) # Causes Alien reader to suppress prompt on response.
def getResponse(conn):
''' Get the reader's response with correct terminator. '''
response = ''
while not response.endswith(ReaderDelim):
more = conn.recv(4096)
if not more:
break
response += more
return response
def GetReaderName():
''' Log into the reader, get the reader name, then quit. '''
print 'Sending commands to the Alien reader...'
cmdSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
cmdSocket.connect((cmdHost, int(cmdPort)))
except Exception as inst:
log('Reader Connection Failed: CmdAddr=%s:%d' % (cmdHost, cmdPort))
log('%s' % inst)
cmdSocket.close()
return False
# Read the initial header from the reader.
response = getResponse(cmdSocket)
print response
# UserName
cmdSocket.sendall('alien%s' % CmdDelim)
response = getResponse(cmdSocket)
print response
# Password
cmdSocket.sendall('password%s' % CmdDelim)
response = getResponse(cmdSocket)
print response
# Get ReaderName command
cmdSocket.sendall('%sGet ReaderName%s' % (CmdPrefix, CmdDelim))
response = getResponse(cmdSocket)
print response
# Quit
cmdSocket.sendall('%sQuit%s' % (CmdPrefix, CmdDelim))
response = getResponse(cmdSocket)
print response
cmdSocket.close()
return True
if __name__ == '__main__':
GetReaderName()
Я получаю заголовок считывателя чужих. Однако я ничего не получаю. При проверке кода Java в Интернете используется ограничитель '\ n' [LR], а не документированный '\ r \ n' [CR] [LF]. Является ли ограничитель TCP/IP «\ n» [LF]? – EMS