2012-01-18 5 views
3

Pythonで書かれたMinecraft Classicサーバーを設計していますが、パケットを正しく送信する方法がわかりません。私はソケットを設定する方法を知っていますが、わからない部分は、プロトコルで必要な形式でそれらを送信する方法です。プロトコルを理解していますが、Pythonで実装する方法ではありません。投稿するコードは本当にありません。ちょうど心拍です。私の質問には関係ありません。私はいくつかのサーバーのソースを見てきましたが、私はそれらを理解していません。Pythonで書かれたMinecraft Classicサーバーでパケットを送信する方法

+1

は 'struct.pack()'を使用します。 [いくつかのpythonのminecraftサーバがすでに存在することに注意してください。 (私の欲しいものは、Pythonのミニクラフトクライアントです)] –

+0

@DanD。私は他人が存在していたことを知っていました。私はいくつかのサーバーのソースを見てきましたが、私はそれらを理解していません。実際に 'struct.pack()'のことを完全な答えに入れることができますか? – elijaheac

答えて

4

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を見ることによって、それらを処理する方法にもいくつかの非常に有用な情報を持っています。

+0

あなたの答えをありがとう! – elijaheac

関連する問題