집단 인터넷,Python에서 TCP 통신 문자열 인코딩 문제
저는 코딩을 가르치는 특정 프로젝트를 맡은 아주 새로운 프로그래머입니다. TCP 명령을 사용할 수있는 많은 장비로 작업하므로 각 단추마다 다른 명령을 보내는 단추 시스템을 구축하려고합니다. 나는 라즈베리 파이 3b를 가지고 파이썬에서 온라인 수업을 들었다. 내가 합리적으로 멀리 내 자신에있어 (내가 원하는 방식으로 작동하는 버튼을 가지고있어!)하지만 내가 붙어 있었는지 TCP 명령을 보내는 것입니다.
구체적으로 말하면 : 데이터를 보내고 있지만 수신되고 있지만 문자열 명령이 제대로 인코딩되지 않았습니다. 명령은 텔넷 세션에서 실행할 때 작동하지만 분명히 스크립트의 일부로 실행되도록합니다. 명령은 텔넷 세션을 통해 수신해야한다고 지정하지 않으며, 다른 방법으로이 명령을 텔넷 세션의 외부 TCP 명령으로 작동 시켰습니다. 파이썬 용 텔넷 모듈에 대해 읽었지만 필자는 필자가 필요하다고 생각하지 않는다.
wireshark를 통한 패킷 전달을 확인했습니다. 내 스크립트에서 보낸 패킷과 텔넷 세션에서 보낸 패킷을 캡처했는데 비슷하지만 비슷하지는 않습니다. 말굽과 수류탄, 맞지? 내 현재의 방법은 문자열 ('안에)을 소문자로 시작하는 것입니다. b. 나는 문자열 뒤에 .encode()를 넣으려고했다. (그 상황에서 b를 생략했다.)
문자열 명령 형식은 다음과 같습니다
내 사용 사례에 대한 그래서setInput "InputName" Value
, 나는 값을 1로 "하나"라는 입력을하고 있어요 : 당신이 그래서
setInput "One" 1
내 스크립트 (아래에 삽입 됨)에서 볼 수 있습니다.
s.sendall(b'setInput "One" 1')
그러나 위 정보가 아니기 때문에 올바른 정보를 전송하지 못합니다. rking과 wireshark에서 똑같이 보지 않습니다.
TL : DR : TCP를 통해 패킷을 보내려고하지만 제대로 인코딩되지 않았습니다. 나는 심지어 이러한 명령을 사용하여 올바른 방향으로 가고 그냥 내가 완전히 다른 방향을 모색해야하는 경우 다른 수단이 문자열을 인코딩 또는 필요하고 경우
는 궁극적으로, 내 질문은 (아마도 텔넷 모듈?)
import socket
import time
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('192.168.100.40', 3040))
print('connected')
time.sleep(2)
s.sendall(b'setInput "One" 1')
print('sent increase')
time.sleep(2)
s.sendall(b'setInput "One" 0')
print('sent decrease')
다음
는 와이어 샤크의 outpu입니다 : 여기
내가 테스트 사용하고 스크립트 내 스크립트의 와이어 샤크의 출력 성공 텔넷 세션의 t :
Wireshark log of the telnet session
일체의 도움이 감사합니다. 나는 멀리서 보았고 내 사건과 비슷한 사건을 찾을 수없는 것 같습니다.
편집 : 잘못된 형식의 경우 죄송합니다. 게시물을 더 잘 표현하는 방법에 대한 조언에 감사드립니다. 이것은 여기에 내 첫 게시물이며 나는 단지 그것의 매달려 있어요. 저의 특전이 없기 때문에 내 사진은 여전히 링크입니다.죄송합니다. 너무 어리 석다면 가능한 한 많은 정보를 제공하여 사람들이 내 문제를 이해하고 해결 방법이 발견 된 경우 비슷한 문제를 가진 사람들이이를 찾을 수 있도록 돕고 싶었습니다.
으로 변경하십시오. 그림이 아닌 실제 코드를 게시하십시오. –
스크립트 링크가있는 곳에서 실제 코드를 복사하여 붙여 넣으십시오. – KingMak
사람들이 불필요한 정보를 소중히하기 위해 시간을 허비하지 않고 도울 수 있도록 더 종합적으로 선택하고 특정 질문을 강조 표시하십시오. 이러한 [mcve 지침] (https://stackoverflow.com/help/mcve)은 유용 할 수 있습니다 ... – FabienP