1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем titov_andrei, 24 ноя 2017.

Метки:
  1. Автор темы
    titov_andrei

    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()
    
    Что нужно исправить, настроить?
     
    Последнее редактирование: 24 ноя 2017
  2. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Какой ужас. Совсем поехавшие :D.
     
  3. Автор темы
    titov_andrei

    titov_andrei Активный участник

    Баллы:
    61
    Подскажите направление хотя-бы ...
     
  4. IcedwinterZ

    IcedwinterZ Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    IcedwinterZ
    Скажи что ты хочешь
     
  5. Cool_boy

    Cool_boy Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    prettydude
    Java
     
  6. iD3LSY

    iD3LSY Активный участник Пользователь

    Баллы:
    76
    Как точно подмечено ;)
     
  7. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    x2
     
  8. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    P.s го рисовать плагина на luaj :D.
     
  9. AtomicScience

    AtomicScience Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    AtomicScience
    Да месье знает толк в извращениях :rolleyes:
     

Поделиться этой страницей