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

小叮当91

无论我设置了哪个端口,Python 都说它被使用了我不明白为什么,我使用的是扭曲的

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.

我不确定您需要哪些代码部分或信息,因此如果您需要任何信息,请告诉我。

服务器.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

赖-

您将服务器设置为侦听两次 - 一次使用listenWS,一次使用reactor.listenTCP删除reactor.listenTCP,因为你想为你listenWS打电话reactor.listenSSL

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用 Python 3.8.3 在 Windows 上安装 MediaPipe 错误的原因可能是什么?

在本地运行python脚本有效,但是通过travis-ci失败,这可能是什么原因?

在Python的try块中使用finally的实际示例可能是什么

Python请求库中的[SSL:UNKNOWN_PROTOCOL]可能是什么原因?

Python Multiprocessing模块意外输出。可能是什么原因造成的?

python virtualenv没有使用正确版本的python

Selenium 没有使用 for 循环 python 输入正确的东西

诗歌没有使用正确的Python版本

django python 项目没有使用指定的模板文件

我没有使用python BeautifulSoup得到结果

没有使用 Python 程序的 Shell 输出

致命的python错误的原因可能是什么:initfsencoding:无法加载文件系统编解码器?

Python:为什么Selenium没有使用Regex抓取循环中的最后一个网页?

为什么io模块对象没有属性'RawIOBase',尽管我正在使用python 2.6

python conda:创建了一个环境,但是没有使用conda的python

有没有使用python库而不安装的方法?

遵守时班级没有显示任何内容......可能是什么原因?

Python 使用标识符而不是变量的原因是什么(如果有的话)?

Linux告诉我正在使用一个串行端口,但是没有使用

python AttributeError: 'tuple' 对象没有使用 matplotlib 的属性 'show'

VSCode中的Python / Jupyter Notebook没有使用正确的环境

Python:如果没有使用函数中的任何 if 语句,则打印一些内容

Python中的multiprocessing.dummy没有使用100%cpu

Python多处理似乎并没有使用多个内核

ImportError:没有使用Python2的名为mysql.connector的模块

在Apache Zeppelin上没有使用python解释器的runParagraph()

Xpath 没有使用 Splinter/Selenium Python 3 选择正确的元素

Python 请求没有使用指定的参数获得正确的页面

Python AttributeError:“NoneType”对象没有使用 BeautifulSoup 的“查找全部”属性