2017-09-09 19 views
0

集団インターネットPythonでTCP通信の文字列をエンコードする際の問題

私は自分自身にコーディングを教える特別なプロジェクトを与えてくれた非常に新しいプログラマーです。私は、TCPコマンドを受け取ることができる多くの機器で動作するので、各ボタンごとに異なるコマンドを送信するボタンシステムを構築することに着手しました。私はラズベリーパイ3bを手に入れ、Pythonでオンラインクラスを取った。私は合理的に遠くにいます(私は自分が望むようにボタンを操作しています!)しかし、私が立ち往生したところでは、TCPコマンドを送信しています。

具体的には:私はデータを送信していますが、受信中ですが、文字列コマンドが正しくエンコードされていません。コマンドはTelnetセッションで実行すると機能的ですが、明らかにスクリプトの一部として実行されます。これらのコマンドは、telnetセッションで受信する必要があることを指定していません。これらのコマンドをtelnetセッションの外部のTCPコマンドとして機能させました。私はPython用のtelnetモジュールについて読んだが、私はそれを必要とは思わない。

私はwiresharkでパケット配信を確認しました。私はスクリプトで送られたパケットとtelnetセッションで送られたパケットをキャプチャしましたが、それらは似ていますが同じではありません。蹄鉄と手榴弾、そうですか?私の現在の方法は、文字列( ')の中に小文字のbを付けることです。私はまた、文字列の後に.encode()を入れてみました(その状況ではbを省略しています)。

stringコマンドの形式は次のとおりです。

私のユースケースのためにそう
setInput "InputName" Value 

、私は1の値に「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 log of my script

は、wiresharkののoutpuです成功したTelnetセッションのT:

Wireshark log of the telnet session

任意およびすべてのヘルプは高く評価されています。私は遠くに見えて、私のような場合は見つからないようです。

編集:申し訳ありませんが、フォーマットが貧弱です。私はポストをどのようにしてより良いものにするかというアドバイスを感謝します。これは私の最初の投稿です、私はちょうどそれのハングアップを取得しています。私の写真はここでは私の特権の欠如のためにリンクです。申し訳ありませんが、あまりにも言葉が苦手な人は、できるだけ多くの情報を提供して、人々が自分の問題を理解するのを助け、解決策が見つかった場合は、同様の問題を抱えている人を助けてください。

+2

に変更してください。 –

+0

実際のコードは、画像ではなくポストしてください。実際のコードをコピーして貼り付けてください。 – KingMak

+0

より人工的で、特定の質問を選択して強調表示してください。余計な情報を消化しようと時間を費やさずに人々を助けることができます。これらの[mcveガイドライン](https://stackoverflow.com/help/mcve)は役に立つかもしれません... – FabienP

答えて

1

telnet tcpデータには、改行と改行、およびデータの終わりが含まれます。明らかに、受信側は、これを含めて動作させる必要があるようです。したがって、あなたのPython文字列を b'setInput "One" 1\r\n'

+0

ありがとう、トン!私はキャリッジリターンを試みたと思うが、ラインフィードを忘れてしまった! 100%が私の問題を解決しました。 –

関連する問題