2012-01-18 2 views
3

Python으로 작성된 Minecraft Classic 서버를 설계하고 있지만 패킷을 올바르게 보내는 방법을 모르겠습니다. 소켓을 설정하는 방법을 알고 있지만 프로토콜에 필요한 형식으로 소켓을 보내는 방법은 잘 모릅니다. 프로토콜을 이해합니다. 파이썬에서 구현하는 방법이 아닙니다. 게시 할 코드가 없으며 하트 비트 만 내 질문과 관련이 없습니다. 여러 서버의 출처를 살펴 봤지만 이해가되지 않습니다.Python으로 작성된 Minecraft Classic 서버에서 패킷을 보내는 방법

+1

은'struct.pack()'을 사용합니다. [이미 파이썬 minecraft 서버가 여러 개 존재한다는 것에주의하십시오. (내 위시리스트에있는 것은 파이썬 클라이언트이다.) –

+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의 패킷 구조를 살펴 봐야합니다. 패킷 설명에 따르면 struct.pack 형식 문자열은 처음 4 바이트의 "Bbh"와 유사합니다. 당신은 패딩 모두 패킷 64 바이트 문자열 + 1,024 바이트의 바이너리 부분의 나머지 부분이를 완료해야합니다 ID 1 및 프로토콜 버전 7과 플레이어 식별 패킷에 대한

struct.pack("Bbh", 0, 1, 7) 

.

편집 : 그냥 기억 된 파이썬은 네이티브 빅 엔디안이 아니므로 포맷 문자열에 던져 넣을 수도 있습니다.

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

관련 문제