Pythonで書かれたMinecraft Classicサーバーを設計していますが、パケットを正しく送信する方法がわかりません。私はソケットを設定する方法を知っていますが、わからない部分は、プロトコルで必要な形式でそれらを送信する方法です。プロトコルを理解していますが、Pythonで実装する方法ではありません。投稿するコードは本当にありません。ちょうど心拍です。私の質問には関係ありません。私はいくつかのサーバーのソースを見てきましたが、私はそれらを理解していません。Pythonで書かれたMinecraft Classicサーバーでパケットを送信する方法
答えて
Dan D.が述べたように、struct.packを使用して、プロトコルの要求に従ってデータをフォーマットすることができます。 http://docs.python.org/library/struct.htmlのドキュメントにはいくつかの例があります。
次に、パケットがどのように表示される必要があるかについて詳しく説明しているhttp://www.minecraftwiki.net/wiki/Classic_Server_Protocol#Packet_Protocolのパケット構造を見てください。パケットの記述によると、最初の4バイトの "Bbh"のようなものを探しているstruct.pack形式の文字列が必要です。 ID 1とプロトコルバージョン7を持つプレイヤー識別パケットの場合
struct.pack("Bbh", 0, 1, 7)
あなたは、パケット64バイトの文字列+ 1024バイトのバイナリ部分、パディングとの両方の残りの部分でこれを完了する必要があります。
編集:ちょっと記憶されたPythonはネイティブのビッグエンディアンではないかもしれないので、フォーマット文字列にもそれを入れたいかもしれません。
struct.pack("!Bbh", 0, 1, 7)
あなたは、パケットフォーマットの例を見つけることができるとmyne2サーバ
https://bitbucket.org/andrewgodwin/myne2/src/236deac8cd2f/myne/core/constants.py
https://bitbucket.org/andrewgodwin/myne2/src/236deac8cd2f/myne/core/packeter.py
のソースにpython module of the week page for structを見ることによって、それらを処理する方法にもいくつかの非常に有用な情報を持っています。
あなたの答えをありがとう! – elijaheac
- 1. Python Parse Minecraftパケット
- 2. pingパケットの送信方法
- 3. パケット送信/受信の処理方法
- 4. パケットをネットワークカードに送信する前にパケットを変更する方法
- 5. .NETでUDPパケットを送受信する
- 6. C#でパケットを送信するには?
- 7. NSOutputStreamでパケットをすぐに送信またはフラッシュする方法
- 8. パケット再送信
- 9. TCP再送信:再送信されるパケットの数はいくつですか?
- 10. サーバーに送信されたパスワードを暗号化する方法
- 11. C#またはC/C++クライアントからパケットを受信し、サーバーにリダイレクトし、サーバーから受信し、クライアントに送信する方法
- 12. Silverlightでサーバーからクライアントにイベントを送信する方法
- 13. Webアプリケーションでサーバーからクライアントにメッセージを送信する方法
- 14. 連続してudpパケットを送信する方法GCDAsyncUdpSocket
- 15. PHP Raw HTTPパケットを送信する方法
- 16. TCPパケット送信エラー
- 17. Pythonで間違ったチェックサムでUDPパケットを受信する
- 18. 接続された2台のコンピュータ間で最速の方法でパケットを送信しますか?
- 19. Pythonでメール送信プログラムを書く
- 20. サーバー送信イベントを閉じる方法
- 21. ウェブサーバーにパケットを送信しますか?
- 22. KryoNet - Androidクライアントにパケットを送信する
- 23. Java/Android:到着時にパケットを受信している間にパケットを送信する方法
- 24. Wiresharkフィルタ:フィルタリングされたパケットの前に送信されたパケットの取得
- 25. WinPcapを使用してC#経由でARPパケットを送信する方法
- 26. AutoItでパケットを送信するにはどうすればいいですか?
- 27. TCP Javaでリアルタイムの大きなパケットを送受信する方法は?
- 28. Androidボタンでサーバーにラジオボタンの値を送信する方法は?
- 29. ソケットC++サーバー/ Javaクライアント経由でintを送信する方法
は 'struct.pack()'を使用します。 [いくつかのpythonのminecraftサーバがすでに存在することに注意してください。 (私の欲しいものは、Pythonのミニクラフトクライアントです)] –
@DanD。私は他人が存在していたことを知っていました。私はいくつかのサーバーのソースを見てきましたが、私はそれらを理解していません。実際に 'struct.pack()'のことを完全な答えに入れることができますか? – elijaheac