我正在設計用Python編寫的Minecraft Classic服務器,但我不知道如何正確發送數據包。我知道如何設置一個套接字,但我不知道的部分是如何以協議所需的格式發送它們。我理解協議,而不是如何在Python中實現它。我沒有真正的代碼發佈,只是心跳,這與我的問題無關。我瀏覽了幾臺服務器的源代碼,但我不明白它們。如何在用Python編寫的Minecraft Classic服務器中發送數據包
回答
正如丹D.提到你可以使用struct.pack格式化您的數據按協議的要求。 http://docs.python.org/library/struct.html的文檔有幾個例子。
然後你需要看看http://www.minecraftwiki.net/wiki/Classic_Server_Protocol#Packet_Protocol的數據包結構,它詳細描述了你的數據包需要的樣子。根據數據包描述,你需要一個struct.pack格式的字符串,前四個字節看起來像「Bbh」。
struct.pack("Bbh", 0, 1, 7)
ID爲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 2012-01-18 01:55:28
- 1. 如何使用Python發送數據包到遠程的Minecraft Classic服務器?
- 2. Python - 發送登錄數據包到Minecraft服務器
- 3. 如何發送Minecraft服務器數據包?
- 4. 在Python中發送登錄數據包到Minecraft服務器時的錯誤
- 5. 爲什麼數據包發送不發送數據(與Minecraft服務器握手)?
- 6. Python - 與Minecraft Classic服務器進行互動
- 7. 發送大數據包到服務器
- 8. 如何在python中發送數據包?
- 9. 如何在服務器端使用發送的發佈數據
- 10. 如何在Classic ASP中使用Exchange服務器發送電子郵件?
- 11. 發送Java包到Python服務器?
- 12. 用Python控制Minecraft服務器
- 13. 如何在Python中使用django編寫簡單的服務器推送實現?
- 14. 發送數據包到我的世界服務器:目標c
- 15. IdUDPClient,如何發送數據包到服務器?
- 16. 如何在Qt創建器中向服務器發送數據?
- 17. 如何從python樹莓派發送數據到mssql服務器?
- 18. Python 3 Flask - 如何發送數據到服務器?
- 19. 發送數據包到網絡服務器?
- 20. 如何比較客戶端在服務器C編程中發送的數據
- 21. Minecraft服務器包裝檢測登錄
- 22. 將數據包從一臺Linux服務器發送到其他服務器(LINUX)
- 23. 用javascript發送數據到服務器
- 24. 用GET發送數據到服務器
- 25. 如何通過api在android中向服務器發送數據?
- 26. 如何在android中向服務器發送註冊數據?
- 27. TCP的Minecraft服務器在Ruby中
- 28. 發送數據到服務器
- 29. 發送數據到服務器使用服務在android
- 30. Angular Routes發送數據到服務器
使用'struct.pack()'。 [並注意到已經存在幾個python minecraft服務器。 (我希望的列表是一個python minecraft客戶端)。] – 2012-01-18 00:10:36
@DanD。我意識到其他人的存在。我瀏覽了幾臺服務器的源代碼,但我不明白它們。你真的可以把關於'struct.pack()'的東西放到完整的答案中嗎? – elijaheac 2012-01-18 00:13:11