资源简介
python socket 图像界面 发送表情 仿QQ
![](http://www.nz998.com/pic/44996.jpg)
代码片段和文件信息
#!/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+ 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获取硬件信息
- 量化交易(附python常见函数的使用方
- python 名字用字排行
评论
共有 条评论