資源簡介
利用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
評論
共有 條評論