Войти или зарегистрироваться

Помогите OSError: [WinError 10048] Обычно разрешается только одно использование адреса сокета (протокол/сетев

titov_andrei

Активный участник
Баллы
61
Пытаюсь настроить работу с плагинами на Python по этому уроку -

Плагин подключается, но список команд не выводится и они не работают.

При "ручном" прогоне плагина выходит ошибка -

Код:
>>> RESTART: C:\Users\andrew\Documents\Minecraft Python\py\plugins\JuicyRaspberryPie\mcpi\pycmdsvr.py
registering command: blk
registering command: hi
Traceback (most recent call last):
  File "C:\Users\andrew\Documents\Minecraft Python\py\plugins\JuicyRaspberryPie\mcpi\pycmdsvr.py", line 84, in <module>
    server = socketserver.TCPServer((HOST, PORT), MyTCPHandler)
  File "C:\Users\andrew\AppData\Local\Programs\Python\Python36-32\lib\socketserver.py", line 453, in __init__
    self.server_bind()
  File "C:\Users\andrew\AppData\Local\Programs\Python\Python36-32\lib\socketserver.py", line 467, in server_bind
    self.socket.bind(self.server_address)
OSError: [WinError 10048] Обычно разрешается только одно использование адреса сокета (протокол/сетевой адрес/порт)
Spigot выдаёт при этом ошибку -
Код:
[08:44:55 WARN]: java.net.ConnectException: Connection refused: connect
[08:44:55 WARN]:        at java.net.DualStackPlainSocketImpl.connect0(Native Method)
[08:44:55 WARN]:        at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
[08:44:55 WARN]:        at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
[08:44:55 WARN]:        at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
[08:44:55 WARN]:        at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
[08:44:55 WARN]:        at java.net.PlainSocketImpl.connect(Unknown Source)
[08:44:55 WARN]:        at java.net.SocksSocketImpl.connect(Unknown Source)
[08:44:55 WARN]:        at java.net.Socket.connect(Unknown Source)
[08:44:55 WARN]:        at java.net.Socket.connect(Unknown Source)
[08:44:55 WARN]:        at java.net.Socket.<init>(Unknown Source)
[08:44:55 WARN]:        at java.net.Socket.<init>(Unknown Source)
[08:44:55 WARN]:        at org.wensheng.plugins.JuicyRaspberryPie.onCommand(JuicyRaspberryPie.java:153)
[08:44:55 WARN]:        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44)
[08:44:55 WARN]:        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:141)
[08:44:55 WARN]:        at org.bukkit.craftbukkit.v1_12_R1.CraftServer.dispatchCommand(CraftServer.java:649)
[08:44:55 WARN]:        at net.minecraft.server.v1_12_R1.PlayerConnection.handleCommand(PlayerConnection.java:1397)
[08:44:55 WARN]:        at net.minecraft.server.v1_12_R1.PlayerConnection.a(PlayerConnection.java:1232)
[08:44:55 WARN]:        at net.minecraft.server.v1_12_R1.PacketPlayInChat.a(PacketPlayInChat.java:45)
[08:44:55 WARN]:        at net.minecraft.server.v1_12_R1.PacketPlayInChat.a(PacketPlayInChat.java:1)
[08:44:55 WARN]:        at net.minecraft.server.v1_12_R1.PlayerConnectionUtils$1.run(SourceFile:13)
[08:44:55 WARN]:        at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
[08:44:55 WARN]:        at java.util.concurrent.FutureTask.run(Unknown Source)
[08:44:55 WARN]:        at net.minecraft.server.v1_12_R1.SystemUtils.a(SourceFile:46)
[08:44:55 WARN]:        at net.minecraft.server.v1_12_R1.MinecraftServer.D(MinecraftServer.java:748)
[08:44:55 WARN]:        at net.minecraft.server.v1_12_R1.DedicatedServer.D(DedicatedServer.java:406)
[08:44:55 WARN]:        at net.minecraft.server.v1_12_R1.MinecraftServer.C(MinecraftServer.java:679)
[08:44:55 WARN]:        at net.minecraft.server.v1_12_R1.MinecraftServer.run(MinecraftServer.java:577)
[08:44:55 WARN]:        at java.lang.Thread.run(Unknown Source)

Файл на который ругается -
Код:
# wenshengwang at gmail dot com
# BSD License
"""This is a TCP server. It is started by the JuicyRaspberryPie plugin and
listen on localhost port 32123.
When it start, it scan the "pplugins" directory for any python files and try
to load them as modules, in these modules, it search for any functions whose
docstring starts with "_mcp" and register them as commands.
When the server receive a command, if it matches one in the registry, it will
be executed. If not, it will execute a dummy command.
"""

import os
import sys
import glob
import socketserver
import threading
import types
import importlib

plugin_dir = os.path.realpath(os.path.join(os.path.dirname(__file__), ".."))
sys.path.insert(0, plugin_dir)
from mcpi.minecraft import Minecraft

HOST = 'localhost'
# TODO: read port from config.yml
PORT = 4444

KEEP_RUNNING = True
def keep_running():
    return KEEP_RUNNING

# command registry
mc_functions = {}

pp_files = glob.glob(os.path.join(plugin_dir, "pplugins", "*.py"))
# import all files and put minecraft function into the mc_functions dict
for pp_file in pp_files:
    basename = os.path.basename(pp_file)
    if basename != "__init__.py":
        try:
            module = importlib.import_module("pplugins." + basename[:-3])
            for item in dir(module):
                if isinstance(module.__dict__[item], types.FunctionType):
                    docs = module.__dict__[item].__doc__
                    if docs and docs.startswith("_mcp"):
                        print("registering command:", module.__dict__[item].__name__)
                        mc_functions[item] = module.__dict__[item]
        except (NameError, ImportError) as e:
            print(e)


def chat(msg="Whaaat?!"):
    mc = Minecraft.create()
    mc.postToChat(msg)


class MyTCPHandler(socketserver.BaseRequestHandler):
    def handle(self):
        global KEEP_RUNNING
        self.data = self.request.recv(1024)
        # firt 2 bytes are length info, from Java's writeUTF
        args = self.data[2:].decode('utf-8').split()
        cmd = args[0]
        if cmd == "list":
            s = "Available commands: %s" % ( " ".join(list(mc_functions.keys())))
            self.request.sendall(s.encode('utf-8'))
            threading.Thread(target=chat, args=(s,), kwargs={}).start()
            return
        if cmd == "help":
            s = 'JuicyRaspberryPie: put your Python files in pplugins, then "/p cmd" to call your function, "/p list" to see list of commands'
            self.request.sendall(s.encode('utf-8'))
            threading.Thread(target=chat, args=(s,), kwargs={}).start()
            return
        if cmd == "BYE":
            print("got shutdown request, signing off")
            KEEP_RUNNING = False
            return
        threading.Thread(target=mc_functions.get(cmd, chat), args=tuple(args[1:]), kwargs={}).start()
        self.request.sendall("ok".encode('utf-8'))

if __name__ == "__main__":
    server = socketserver.TCPServer((HOST, PORT), MyTCPHandler)
    def server_serve():
        while keep_running():
            server.handle_request()
    threading.Thread(target=server_serve).start()

Что нужно исправить, настроить?
 
Последнее редактирование:
Скажи что ты хочешь
 
Назад
Верх