资源简介
利用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试题12套(包括选择题和
- pywin32_python3.6_64位
- python+ selenium教程
- PycURL(Windows7/Win32)Python2.7安装包 P
- 英文原版-Scientific Computing with Python
- 7.图像风格迁移 基于深度学习 pyt
- 基于Python的学生管理系统
- A Byte of Python(简明Python教程)(第
- Python实例174946
- Python 人脸识别
- Python 人事管理系统
- 基于python-flask的个人博客系统
- 计算机视觉应用开发流程
- python 调用sftp断点续传文件
- python socket游戏
- 基于Python爬虫爬取天气预报信息
- python函数编程和讲解
- Python开发的个人博客
- 基于python的三层神经网络模型搭建
- python实现自动操作windows应用
- python人脸识别(opencv)
- python 绘图(方形、线条、圆形)
- python疫情卡UN管控
- python 连连看小游戏源码
- 基于PyQt5的视频播放器设计
- 一个简单的python爬虫
- csv文件行列转换python实现代码
- Python操作Mysql教程手册
- Python Machine Learning Case Studies
- python获取硬件信息
评论
共有 条评论