python说正在使用端口,而它没有使用端口的原因可能是什么?

python说正在使用端口,而它没有使用端口的原因可能是什么?,python,Python,无论我设置了什么端口,Python都说它正在使用,我不明白为什么,我使用的是twisted Sat Aug 26 12:49:31 2017 - (/usr/lib/python2.7/dist-packages/twisted/internet/tcp.py:980) Couldn't listen on any:4444: [Errno 98] Address already in use. 我不确定您需要什么代码部分或信息,所以如果您需要什么,请告诉我 server.py import

无论我设置了什么端口,Python都说它正在使用,我不明白为什么,我使用的是twisted

Sat Aug 26 12:49:31 2017 - (/usr/lib/python2.7/dist-packages/twisted/internet/tcp.py:980) Couldn't listen on any:4444: [Errno 98] Address already in use.
我不确定您需要什么代码部分或信息,所以如果您需要什么,请告诉我

server.py

import glob
import uuid
from modules import util
from modules import db as _db
from modules import LOG
from objects.user import User
from objects.room import Room
from objects.message import Message
from objects.Table import Table
from autobahn.twisted.websocket import WebSocketServerProtocol, \
    WebSocketServerFactory, \
    listenWS

def hexc(e):
    et, ev, tb = sys.exc_info()
    if not tb:
        return str(e)
    while tb:
        lineno = tb.tb_lineno
        fn = tb.tb_frame.f_code.co_filename
        tb = tb.tb_next
    return "(%s:%i) %s" % (fn, lineno, str(e))

class oChat(WebSocketServerProtocol):
    _rooms = []
    _userlist = Table()
    _commands = Table()
    _commands.user = Table()
    db = _db.db('/home/chat/database.db')

    def onOpen(self):
        self.loadUserCommands()
        self.loadSysCommands()

    def getLevel(self, user):
        if user.mod:
            return 1
        elif user.owner:
            return 2
        else:
            return 0

    def add(self, object):
    if object not in self._rooms:
        self._rooms.append(object)

    def get(self, name):
    for room in self._rooms:
        if room.name == name: 
           return room

    def execFile(self, f, dict):
        with open(f, "r") as file:
            try:
                exec (compile(file.read(), f, 'exec'), dict)
            except:
                execfile(f, dict)
            file.close()
        return dict

    def config(self, value):
        config = {}
        self.execFile("configuration/config.conf", config)
        return config[value]

    def getCommand(self, name):
        name = name.lower()
        if self._commands.has_key(name):
            if not self._commands[name].disabled:
                return self._commands[name]

    def getUserCommand(self, name):
        name = name.lower()
        if self._commands.user.has_key(name):
            if not self._commands.user[name].disabled:
                return self._commands.user[name]


    def setCommand(self, name, desc, func, disabled=False):
        name = name.lower()
        self._commands[name] = Table()
        self._commands[name].desc = desc
        self._commands[name].func = func
        self._commands[name].disabled = disabled

    def setUserCommand(self, name, desc, func, disabled=False, level=0):
        name = name.lower()
        self._commands.user[name] = Table()
        self._commands.user[name].desc = desc
        self._commands.user[name].func = func
        self._commands.user[name].level = level
        self._commands.user[name].disabled = disabled

    def reload(self):
        try:
            self.loadSysCommands()
            self.loadUserCommands()
        except Exception as e:
            print hexc(e)

    def make_user(self, *args):
        return User(*args)

    def make_room(self, *args):
        return Room(*args)

    def make_message(self, *args):
        return Message(*args)

    def loadUserCommands(self):
        files = glob.glob("protocol/user/*.py")
        for file in files:
            b = self.execFile(file, {})
            b['init'](self)

    def loadSysCommands(self):
        files = glob.glob("protocol/*.py")
        for file in files:
            b = self.execFile(file, {})
            b['init'](self)

    def joinRoom(self, room, user, args):
        has_sym = util.has_symbles(args, False)
        room.removeUser(user, self)
        room._sendCommand("uc", str(room.getCount(self)))
        if args in self.db.getRooms():
            room.addUser(user, self)
            user.setNewRoom(room.name)
        self.add(room)
            room._sendCommand("uc", str(room.getCount(self)))
            return True
        else:
            args = args.replace(" ", "-")
            if not has_sym and user.status == "logged_in":
                self.db.addRoom(args, user.name)
                room = Room(args, self)
                self.add(room)
                user.setNewRoom(args)
        room.addUser(user, self)
                self.db.setTitle(room.name, user.name, room.name)
                room._sendCommand('title', room.name)
                room._sendCommand("uc", str(room.getCount(self)))
                return True
            else:
                return False

    def onConnect(self, req):
        self.id = uuid.uuid4().hex
        User(self.id).setIdent(db._ident(str(self.peer.split(":", 2)[1])))
    User(self.id).setConnection(self.id, self)
        msg = "[CONNECT] IP(%s) IDENTITY(%s)" % (str(self.peer.split(":", 2)[1]), User(self.id).ident)
        print(LOG.Log(msg))

    def onMessage(self, payload, isBinary):
        data = payload.decode('utf8').split("::", 1)
        user = User(self.id).get()
        room = self.get(user.roomname)
    if not room: room = Room(user.roomname.lower(), self)
    try: room.check(user, self.db)
    except: pass
        print LOG.Log(payload.decode("utf8"))
        if len(data) > 1:
            cmd, args = data[0], data[1]
        else:
            cmd, args = data[0], ""
        if cmd == "bmsg":
            if args.startswith(self.config("USER_PROTOCOL_SEP")):
                data = args.split(self.config("USER_PROTOCOL_SEP"), 1)
                data = data[1].split(" ", 1)
                if len(data) > 1:
                    cmd, args = data[0], data[1]
                else:
                    cmd, args = data[0], ""
                key = cmd
                cmd = self.getUserCommand(key)
                msg = Message(room.name, user.name, args, ident=user.ident)
                if cmd and self.getLevel(user) >= cmd.level: # user protocol
                    try: cmd.func(self, room, user, msg, args)
            except Exception as e: user._sendCommand('sysmsg', 'er', hexc(e))
            else:
                if not user.banned:
                    key = cmd
                    msg = Message(room.name, user.name, args, ident=user.ident) # just storing the message the bmsg.py handles sending
                    msg.createMessage(self.db, True)
                    cmd = self.getCommand(key)

                    if cmd: # main protocol bmsg
                        if user.status == 'logged_in': cmd.func(self, room, user, msg, args)
            else: user._sendCommand('sysmsg', 'er', 'login or register')
                else:
                    user._sendCommand('sysmsg', 'banned', 'you are banned') # set on sending live msg only
        else:
            key = cmd
        cmd = self.getCommand(key)
            if cmd: # main protocol other
                msg = Message(room.name, user.name, args, ident=user.ident, storeMsg=False)
                try: cmd.func(self, room, user, msg, args)
        except Exception as e: user._sendCommand("sysmsg", "er", hexc(e))

if __name__ == '__main__':
    try:
        import sys
        from twisted.internet import reactor,ssl
    contextFactory = ssl.DefaultOpenSSLContextFactory('/etc/letsencrypt/live/otku.ga/privkey.pem',
'/etc/letsencrypt/live/otku.ga/fullchain.pem')
        factory = WebSocketServerFactory(u"wss://otku.ga:4444")
        factory.protocol = oChat
    listenWS(factory, contextFactory)
        #log.startLogging(sys.stdout)
        #factory.setProtocolOptions(maxConnections=2)
        reactor.listenTCP(4444, factory)
        reactor.run()

    except KeyboardInterrupt:
        print("[ERR] KBI")
    except Exception as e:
        LOG.Log(hexc(e), 'er')
我没有任何错误,除了端口未使用时正在使用。
如果您需要整个服务器,我将提供一个带有requirements.txt的zip文件,这可能有多种原因[通用解决方案]

原因1:您可能尝试运行的应用程序是保留端口[0-1024]之一,因此某些应用程序可能正在实际使用该端口

原因2:您可能会终止应用程序,因此从未调用关闭套接字的指令(例如socket.close())。所以插座在某个地方是开着的


原因3:这是您唯一的错误消息吗?它说的是关于管理员权限的吗?您是否尝试过在管理员权限下运行?

您正在将服务器设置为侦听两次–一次使用
listenWS
,一次使用
reactor.listenTCP
。删除
reactor.listenTCP
,因为您希望
listenWS
为您调用
reactor.listenSSL

您以前运行过该程序,然后执行了Ctrl+Z。
sudo netstat-l | grep 4444
是否意外启动了两台服务器?显示您正在使用的命令(
twist
?)和已启动服务的模块源。netstat在运行
python服务器时不输出任何内容。py
服务器使用twisted pythonOkay,您确实在尝试侦听两次。删除
reactor.listenTCP
行。以root用户身份运行,然后重新启动的服务器仍显示其正在使用