资源简介
python socket 图像界面 发送表情 仿QQ
代码片段和文件信息
#!/usr/bin/env python
# -*- coding: utf-8 -*-
“““
IRC 聊天室-服务器
“““
from asyncore import dispatcher
from asynchat import async_chat
import socket
import asyncore
import time
“““asyncore 库能够让程序同时处理多个连接,
实现并发处理。
允许服务器逐个对连接的用户进行服务,通过循环读取每个用户
发送的部分信息来实现并发处理。
asynchat 用于收集并处理客户端发送过来的数据
“““
PORT = 5005
NAME = ‘#irc1‘
names = {‘127.0.0.1‘: ‘小李‘
‘192.168.200.114‘: ‘小明‘
‘192.168.200.115‘: ‘某人‘
‘192.168.200.116‘: ‘阿飞‘
‘192.168.200.110‘: ‘小慧‘
}
def strf_message(name data users):
“““格式化消息
“““
now = time.strftime(‘%H:%M:%S‘)
return ‘[%s] <%s> %s:%s‘ % (now name data ‘\n‘.join(users))
class ChatSession(async_chat):
“““处理会话,收集来自客户端的数据
“““
def __init__(self server sock addr):
async_chat.__init__(self sock)
self.server = server
self.set_terminator(‘\n‘) # 按行处理数据
self.data = []
self.addr = addr
self.names = self.server.names
ip = self.addr[0]
self.name = self.names.get(ip ip).replace(‘:‘ ‘-‘)
self.server.online_users.append(self.name)
self.server.online_users = list(set(self.server.online_users))
# 会话产生时发送欢迎信息
self.push(strf_message(‘server‘ ‘欢迎来到 %s‘
% self.server.name self.server.online_users))
self.server.broadcast(strf_message(‘server‘ ‘%s 已加入‘
% self.name self.server.online_users))
print ‘%s has entered‘ % str(self.addr)
def collect_incoming_data(self data):
“““搜集当前会话发过来的消息
“““
self.data.append(strf_message(self.name data
self.server.online_users))
print self.data[-1].decode(‘utf8‘)
def found_terminator(self):
“““将收集的消息广播给所有用户
“““
line = ‘‘.join(self.data)
self.data = []
self.server.broadcast(line)
def handle_close(self):
“““会话结束时
“““
print ‘%s has left‘ % str(self.addr)
async_chat.handle_close(self)
self.server.disconnect(self)
class ChatServer(dispatcher):
“““接受连接并处理会话
“““
def __init__(self port name names):
dispatcher.__init__(self)
self.create_socket(socket.AF_INET socket.SOCK_STREAM) # 创建 socket
self.set_reuse_addr() # 重用绑定的端口,重启服务时不用等待系统释放该端口
self.bind((‘‘ port)) # 绑定
self.listen(5)
self.name = name # 当前服务器名称
self.names = names # 所有用户列表
self.online_users = []
self.sessions = []
def disconnect(self session):
“““当某个会话结束时
“““
print self.online_users
try:
self.online_users.remove(session.name)
except:
pass
print self.online_users
self.broadcast(strf_message(‘server‘ ‘%s 已离开‘ % session.name
self.onl
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2012-12-11 19:21 聊天室\
文件 4075 2012-12-07 11:15 聊天室\chat_server.py
文件 9310 2012-12-07 11:45 聊天室\chat_ui.py
目录 0 2012-12-11 19:21 聊天室\images\
文件 5430 2006-08-21 02:05 聊天室\images\irc_big.ico
文件 1742 2006-08-21 02:05 聊天室\images\irc_small.ico
文件 16206 2011-02-02 10:15 聊天室\images\Smiley_Cry.ico
文件 16206 2011-02-02 10:15 聊天室\images\Smiley_Disgust.ico
文件 16206 2011-02-02 10:15 聊天室\images\Smiley_Happy.ico
文件 16206 2011-02-02 10:15 聊天室\images\Smiley_Interest.ico
文件 16206 2011-02-02 10:15 聊天室\images\Smiley_Laugh.ico
文件 16206 2011-02-02 10:15 聊天室\images\Smiley_lookside.ico
文件 16206 2011-02-02 10:15 聊天室\images\Smiley_Love.ico
文件 16206 2011-02-02 10:15 聊天室\images\Smiley_omg.ico
文件 16206 2011-02-02 10:15 聊天室\images\Smiley_Ph34r.ico
文件 16206 2011-02-02 10:15 聊天室\images\Smiley_Sad.ico
文件 16206 2011-02-02 10:15 聊天室\images\Smiley_sadq.ico
文件 16206 2011-02-02 10:15 聊天室\images\Smiley_Sealed.ico
文件 16206 2011-02-02 10:15 聊天室\images\Smiley_Skeptic.ico
文件 16206 2011-02-02 10:15 聊天室\images\Smiley_Smile.ico
文件 16206 2011-02-02 10:15 聊天室\images\Smiley_smileq.ico
文件 16206 2011-02-02 10:15 聊天室\images\Smiley_Tongue.ico
文件 16206 2011-02-02 10:15 聊天室\images\Smiley_Wink.ico
文件 329728 2012-12-07 10:14 聊天室\聊天室项目_.ppt
- 上一篇:Python排序算法
- 下一篇:KNN算法的代码实现
相关资源
- Python排序算法
- anaconda+python3.5
- 基于python实现的http接口自动化测试框
- jpype1for python3.6
- traits-4.6.0-cp36-cp36m-win_amd64.whl
- python svm算法源码
- python批量灰度化处理图片
- calendar.py
- Python最小二乘法拟合直线
- python五子棋双人对战
- pid code python
- python项目监控
- 声学语音处理 python 源码
- Python实现循环神经网络RNN
- python下元胞自动机的代码和相应的绘
- python 视频学习
- SIFT的Python 代码
- pythonympx.rar
- python selenium模块刷B站播放量
- pycuda 用于加速python 3.6
- 社团检测经典算法实现 python
- [『编程语言』] 小甲鱼零基础入门学
- tecplot二次开发
- 区块链入门学习代码 含完整挖矿、
- 随机森林做泰坦尼克号案例的Python实
- 基于Python的SVM解决异或问题
- Tensorflow笔记-中国大学全部讲义源代码
- Python识别深圳信用网验证码的完整代
- C4.5决策树算法的Python代码和数据样本
- python音乐播放+滤波器
评论
共有 条评论