2015-06-29 2 views
0

У меня возникают трудности с подключением моей программы к двум модемам Digi, которые у меня есть.Python TCP Socket Programming

def sockCon(): 
global HOST 
global PORT 
global TX 

TX = "\x7E\x00\x0C\x01\x00\xA5" 

BUFFER = 1024 

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.connect((HOST, PORT)) 
b = 1 
while b == 1:   
    print ('T '+TX) 
    s.send(TX.encode('latin-1'))   
    time.sleep(5) 
    data = s.recv(BUFFER) 
    print ('R '+decode(TX,'latin-1'), BUFFER) 

В основном проблема заключается в том, что, когда он посылает это будет либо отправить совершенно неправильно, или оно не будет посылать на всех, и это даст мне эту ошибку.

TypeError: 'str' does not support the buffer interface 

ответ

1

вы, вероятно, не следует делать, что кодирование бит

TX = b"\x7E\x00\x0C\x01\x00\xA5" 

должен решить вашу проблему (в Python3 вам нужно отправить байт не строку)

TX = b"\x7E\x00\x0C\x01\x00\xA5" 
s.send(TX) 
print(repr(s.recv(BUFFER))) 
0

Если вы используете Python3x то строка не такая же, как для Python 2.x, вы должны передать ее в байты (закодировать ее).

TX = "\x7E\x00\x0C\x01\x00\xA5" 
s.send(bytes(TX, 'latin-1')) 
+0

Я не думаю, что он хочет на самом деле кодировать, как Latin 1 ... Я думаю, что он просто хочет, чтобы отправить его в байтах (хотя кодированный может быть такой же) .. (да я просто проверял его кодирует, чтобы точно одинаковые байты с или без бит latin1: P) –

Смежные вопросы