簡體   English   中英

在Python中為TCP通信編碼字符串時出現問題

[英]Problems encoding string for TCP Communication in Python

集體互聯網

我是一個非常新的程序員,給了我一個專門的項目來教自己編程。 我使用許多可以接收TCP命令的設備,因此我着手構建一個按鈕系統,該系統將為每個按鈕發送不同的命令。 我給自己買了Raspberry Pi 3b,並上了Python在線課程。 我已經靠自己了很多(按我想要的按鈕工作了!),但是我一直被困的是發送TCP命令。

更具體地說:我正在發送數據並且正在接收數據,但是string命令未正確編碼。 當我在telnet會話中執行命令時,這些命令是有效的,但是顯然我希望它們作為腳本的一部分執行。 這些命令沒有指定需要通過telnet會話接收,並且通過其他方式,我已經將這些命令用作telnet會話外部的TCP命令。 我讀到有關Python的telnet模塊的信息,但我認為我不需要它。

我用wireshark驗證了數據包的傳遞。 我捕獲了我的腳本發送的數據包和telnet會話發送的數據包,它們相似但不相同。 馬蹄鐵和手榴彈,對嗎? 我當前的方法是在字符串(在'內)前面加上小寫b。 我還嘗試將.encode()放在字符串后(在這種情況下省略b)。

字符串命令的格式為:

setInput "InputName" Value

因此,對於我的用例,我將名為“ One”的輸入設置為值1:

setInput "One" 1

因此,如您所見(在下面插入腳本),我最終使用了:

s.sendall(b'setInput "One" 1')

但是它不能發送正確的信息,因為它不起作用,並且在wireshark中看起來也不一樣。

TL; DR:我正在嘗試通過TCP發送數據包,但未正確對其進行編碼。

最終,我的問題是使用這些命令是否可以使我朝正確的方向前進,而只是需要一種不同的方式來對字符串進行編碼,或者是否需要完全探索另一個方向(也許是telnet模塊?)

這是我一直在測試的腳本以及腳本的wireshark輸出:

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')

我的腳本的Wireshark日志

這是成功的telnet會話的wireshk輸出:

telnet會話的Wireshark日志

任何和所有幫助表示贊賞。 我四處張望,似乎找不到與我相似的案例。

編輯:對不起,格式不正確。 我感謝有關如何更好地展示帖子的建議。 這是我在這里的第一篇文章,而我對此很了解。 由於我在這里的特權不足,我的照片仍然是鏈接。 抱歉,如果我太羅word,我只是想提供盡可能多的信息,以幫助人們理解我的問題,如果找到了解決方案,則可以幫助有類似問題的人們找到此問題。

telnet tcp數據包括回車符和換行符以及數據的結尾。 顯然,接收部分需要包含此內容以使工作正常。 因此,將您的Python字符串更改為b'setInput "One" 1\\r\\n'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM