2012-03-01 2 views
3

Привет, добрые люди StackOverflow.Как отправить пакеты на удаленный сервер Minecraft Classic на Python?

Я пытаюсь создать своего рода «бот», который может подключаться к серверу Minecraft Classic, отправлять сообщения и, возможно, строить.

В любом случае, у меня возникли проблемы с пониманием того, как отправлять пакеты в python и как их правильно кодировать.

Вот пакеты мне нужно отправить, я хочу отправить «игрока Identification» один: http://www.minecraftwiki.net/wiki/Classic_server_protocol#Client_.E2.86.92_Server_packets Я знаю, что мне нужно быть с помощью сокетов, и мне нужно использовать struct.pack, но как именно я могу Отправь это?

Код примера, который отправляет регистрационный пакет, будет изумительным.

Спасибо.

ответ

4

я получить мяч прокатки:

import socket 
import struct 

username = "username_value" 
verification_key = "verification_key" 

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # boilerplate 
s.connect(("example.com", 1234)) # adjust accordingly 

# now for the packet 
# note that the String type is specified as having a length of 64, we'll pad that 

packet = "" 

packet += struct.pack("B", 1) # packet type 
packet += struct.pack("B", 7) # protocol version 
packet += "%-64s" % username # magic! 
packet += "%-64s" % verification_key 
packet += struct.pack("B", 0) # that unused byte, assuming a NULL byte here 

# send what we've crafted 
s.send(packet) 

«% -20s» может быть странно для вас, если вы никогда не использовали строки формата. По существу ..

print "%s" % 5 

.. напечатает из 5 ..

print "%10s" % 5 

.. будет подушечка выходной быть ровно 10 символов в ширину. Но подушечки их на правой стороне, мы хотим, чтобы обивка на левом - отсюда - ..

print "%-10s" % s, "<this will be 9 spaces away from the '5'>" 

.. поиграйте с ним.

Если что-то неясно, дайте мне знать. Мне нравится то, что вы делаете, напоминает мне старый проект. За исключением того, что у меня не было опрятной спецификации протокола, как вы, удачливый ублюдок. ;)

+2

Большое спасибо за это! Это именно то, что я хотел, не мог быть более полезным. – Jack

+0

Привет, вы можете мне помочь? Когда я пытаюсь подключиться к MC Classic Server, он дает мне ответ об ошибке «Несовместимый клиент или сетевая ошибка». Что мне делать? – JadedTuna

Смежные вопросы