0

わかりました、これは基本的に私のコードです:

class Server:
    def __init__(self, addr, port, mc):
        self.mc = mc
        data = {'user': mc.user, 'password': mc.pswd, 'version': '12'}
        data = urllib.urlencode(data)
        dta = urllib.urlopen("https://login.minecraft.net", data=data).read()
        dta = dta.split(":")
        self.sessionid = dta[3]
        self.socket = socket.socket()
        self.socket.connect((addr, port))
        data = {"user": mc.user, "host": addr, "port": port}
        enc = mc.user.encode('utf-16BE')
        structfmt = '!bh'
        bytes = struct.pack(structfmt, 2, len(enc))
        bytes = bytes + enc
        self.socket.send(self.get_login_packet(mc.user, mc.pswd, addr, port))
        self.random = False
        self.world = World()
    def test(self):
        self.socket.send(self.get_chat_packet(raw_input("Enter a message: ")))
        self.disconnect(raw_input("Enter the disconnect message: "))
    def keep_alive(self):
        if self.random:
            self.socket.send(struct.pack("!bi", 0, self.random))
    def get_login_packet(self, user, password, addr, port):
        data = {"user": mc.user, "host": addr, "port": port}
        enc = mc.user.encode('utf-16BE')
        structfmt = '!bh'
        bytes = struct.pack(structfmt, 2, len(enc))
        bytes = bytes + enc
        return bytes
    def get_chat_packet(self, message):
        if len(message) > 100:
            message = message[:100]
        return struct.pack("!bs", 3, message)
    def get_disconnect_packet(self, message):
        return struct.pack("!bs", 0xFF, message)
    def disconnect(self, message):
        self.socket.send(self.get_disconnect_packet(message))
        time.sleep(0.1)
        self.socket.close()

mc は Python の Minecraft インスタンスであり、基本的にサーバー (上記のクラス)、ユーザー、pswd、およびワールド (現時点では None タイプ) の 4 つの属性があります。

Minecraft Classic に接続しようとしているのではなく、有料版に接続しようとしています。Windows XP で Python 2.5 を使用しています。サーバーに接続しようとしたときに表示されたエラーは

[INFO] Disconnecting /127.0.0.1:2292: Took too long to log in
[INFO] /127.0.0.1:2295 lost connection

Pythonのエラーは

    self.socket.send(self.get_chat_packet(raw_input("Enter a message: ")))
socket.error: (10053, 'Software caused connection abort')

なぜこれが起こっているのか、できればそれを修正する方法も教えてください。ありがとう!

4

1 に答える 1

-1

あなたのコードはひどいものであり、このようなコードではすべてのパケットを有用で比較的効率的な方法で実装することに失敗します。たとえば、mc3pでプロトコルがどのように実装されているかを見てください。

今あなたの問題に、あなたはあなたのHandshakeパケットでプロトコルバージョン(= Minecraft 1.3の場合は39)を送信していhostませんport

于 2012-10-15T21:55:04.700 に答える