titov_andrei
@titov_andrei
All my life I learn - and die a fool!

Как исправить ошибку «OSError: [WinError 10048] Обычно разрешается только одно использование адреса сокета (протокол/сетевой адрес/порт)»?

При "ручном" прогоне плагина выходит ошибка -
>>> 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()
  • Вопрос задан
  • 12009 просмотров
Пригласить эксперта
Ответы на вопрос 2
Найди процесс, который использует этот порт

netstat -ano | findstr :8080

Убей его через диспетчер задач по PID.
Ответ написан
Комментировать
dimonchik2013
@dimonchik2013
non progredi est regredi
запусти на другом порту
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы