资源简介
利用python来完成IRC协议的实现以及系统研制,目标是能够实现点对点IRC以及通过python构建在线IRC聊天室。
代码片段和文件信息
# -*- coding: utf-8 -*-
import socket
import asyncore
import asynchat
host = ‘127.0.0.1‘# 即本地IP地址
port = 5000
# hall_name = ‘Learning‘
class EndSession(Exception):pass #用于产生异常,退出
class CommandHandler:
‘‘‘
消息处理。
根据用户发来的消息进行判断,并调用对应的实例方法。
分为‘/‘开头的命令,和普通的消息。
‘‘‘
def handle(self session line):
‘‘‘
尝试对消息进行拆分、判断
‘‘‘
if not line: return
#print line
parts = line.split(‘ ‘ 1)
#print parts
if parts[0][0] == ‘/‘: # 检查是否命令,命令格式:/cmd
cmd = parts[0][1:]
#print cmd
try:
line = parts[1].strip()
#print line
except IndexError:
line = None
meth = getattr(self ‘do_‘+cmd None) # 查看用户所在的房间是否有该属性/方法。self ,和 房间绑定
# print meth
# >
# >
try:
meth(session line)
except TypeError:
self.unknow(session cmd)
else: # 对于普通的聊天信息,默认直接调用 ‘do_broadcast‘ 方法广播给房间内其他人
meth = getattr(self ‘do_broadcast‘ line)
try:
meth(session line)
except TypeError:
self.unknow(session line)
def unknow(self session cmd):
‘‘‘
当找不到相应的命令时,进行提示
‘‘‘
session.send(‘Unknow command: %s\r\n‘ % cmd)
class Room(CommandHandler):
‘‘‘
房间的会话管理,继承了 ‘CommandHandler‘ 类
‘‘‘
def __init__(self server room_name):
‘‘‘
初始化房间,每个房间保存当前用户的会话列表,服务器实例,房间名称
‘‘‘
self.sessions = []
self.server = server
self.room_name = room_name
def add(selfsession):
self.sessions.append(session)
def remove(selfsession):
self.sessions.remove(session)
def broadcast(self session line):
‘‘‘
广播消息给房间内,除自己外的所有人
‘‘‘
# print session‘ session‘
# print self.sessions‘ self.sessions‘
for i in self.sessions:
if i != session:
i.send(line + ‘\r\n‘)
def do_logout(selfsessionline):
raise EndSession
class Server(asyncore.dispatcher):
‘‘‘
服务器类
‘‘‘
def __init__(self port host):
‘‘‘
初始化服务器,开始侦听用户的服务请求。
以字典方式保存所有用户的 client_name 和 session 映射信息,避免昵称冲突
初始化 Hall 以及 三个聊天室
‘‘‘
asyncore.dispatcher.__init__(self)
self.create_socket(socket.AF_INET socket.SOCK_STREAM)
self.set_reuse_addr()
self.bind((host port))
self.listen(5)
self.users = {} # 用于比较是否有昵称冲突
self.hall = Hall(self ‘Hall‘) # server 启动便实例化 Hall ,作为 server 属性。同时 ,初始化hall,将 server 存为 hall 属性
self.python = ChatRoom(self ‘python‘)
self.write = ChatR
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 10737 2019-01-21 03:27 SourceCode\IRC.py
文件 8901 2019-01-16 15:10 SourceCode\mtTkinter.py
文件 9059 2019-01-21 03:31 SourceCode\tk.py
目录 0 2019-01-21 03:47 SourceCode
----------- --------- ---------- ----- ----
28697 4
- 上一篇:OFO单车数据爬虫
- 下一篇:python标准库中文版.tar
相关资源
- python标准库中文版.tar
- Python3 实现SM3国产哈希算法
- python爬取微博热搜并直接写入mysql.r
- Python-Scrapy 入门级爬虫项目实战
- 用python编写的信息管理系统的增删改
- 用python编写的饮料自动购物机
- [计算方法作业]利用python中matplotlib实
- python电子书大全.txt
- python用Django实现简单的web版学生信息
- Python-从Python高效处理FASTQ文件
- Python-机器学习完全课程
- Python-利用flask搭建的一个简单的个人
- Python-利用Python实现中文文本关键词抽
- Python-一个WindowsLinux和Mac的简单键盘记
- Python-Glyce用于汉字表示的字形向量
- paillier 纯 python Paillier同态密码.zip
- fancyimpute 在 python 中,实现了多元插值
- 利用pythonscihub成文献为PDF操作
- 详解python实现交叉验证法与留出法
- 用python做一个搜索引擎(Pylucene)的代
- python利用urllib实现爬取京东网站商品
- python微信公众号之关键词自动回复
- python爬取cnvd漏洞库信息的
- arcgis使用python脚本批量裁剪影像
- Python的Django框架中的数据库配置指南
- python实现超市商品销售管理系统
- Python-Tkinter Text输入内容在界面显示的
- Python爬虫库requests获取响应内容、响应
- k均值聚类python实现
- Python 抓取网页链接
评论
共有 条评论