# encoding=utf-8
import tornado.ioloop
import tornado.web
import tornado.websocket
import json
import time
import HTMLParser
import Image
import tempfile
import json
import socket
import fcntl
import struct
import re
import os
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write("Hello, world")
class web(tornado.websocket.WebSocketHandler):
clients = set()
user = {}
@staticmethod
def send_to_all(message):
for c in web.clients:
c.write_message(message)
@staticmethod
def send_to_all_notme(message, self):
for c in web.clients:
if c == self: continue
c.write_message(message)
def open(self):
date = time.strftime("%H:%M:%S", time.localtime())
self.write_message(json.dumps({
'type': 'init',
'self_id': id(self),
'message': u'Welcome to Web Chat Author by LiZhong!',
'time' : date,
}))
def on_close(self):
date = time.strftime("%H:%M:%S", time.localtime())
web.clients.remove(self)
if web.user.has_key(id(self)):
username = web.user[id(self)]['user']
else:
username = 'None'
web.send_to_all({
'type': 'sys',
'message': username + u' Get out',
'time' : date,
})
del web.user[id(self)]
def on_message(self, message):
date = time.strftime("%H:%M:%S", time.localtime())
user_id = id(self)
if web.user.has_key(user_id):
if message == ':who':
self.write_message(json.dumps({
'type': 'command',
'fun' : 'who',
'user': web.user,
}))
elif message.split()[0] == ':img':
if not message.split()[1]:return False
if web.user.has_key(user_id):
username = web.user[user_id]['user']
else:
username = 'None'
web.send_to_all({
'type': 'img',
'id': user_id,
'user' : username,
'message': message.split()[1],
'time' : date,
})
elif re.match(r'\w{64}\.(jpg|jpeg|png|gif)' , message) and os.path.exists('./static/upload/'+message):
message = '/static/upload/'+message
if web.user.has_key(user_id):
username = web.user[user_id]['user']
else:
username = 'None'
web.send_to_all_notme({
'type': 'img',
'id': user_id,
'user' : username,
'message': message,
'time' : date,
},self)
else:
if web.user.has_key(user_id):
username = web.user[user_id]['user']
else:
username = 'None'
web.send_to_all({
'type': 'user',
'id': user_id,
'user' : username,
'message': message,
'time' : date,
})
else:
web.user[user_id] = {'user' : message,'time':date }
web.send_to_all({
'type': 'sys',
'message': message + u' Come in',
'time' : date,
})
web.clients.add(self)
print web.user
class Upload(tornado.web.RequestHandler):
def get(self):
self.html({'error' : 1, 'msg' : u'Access Error!'})
def post(self):
myfile = self.request.files.get('file')
filename = self.get_argument('filename', False)
if not filename :
self.html({'error' : 1, 'msg' : u'缺少filename参数'})
return False
image_type_list = ['image/gif', 'image/jpeg','image/pjpeg', 'image/bmp', 'image/png', 'image/x-png']
if myfile is None:
self.html({'error' : 1, 'msg' : u'请选择图片'})
return False
for f in myfile:
if f['content_type'] not in image_type_list:
self.html({'error' : 1, 'msg' : u'图片类型错误'})
return False
# write a file
tf = tempfile.NamedTemporaryFile()
tf.write(f['body'])
tf.seek(0)
# create normal file
try:
img = Image.open(tf.name)
except IOError, error:
self.html({'error' : 1, 'msg' : u'图片不合法'})
return False
img.save("./static/upload/" + filename )
tf.close()
self.html({'error' : 0, 'msg' : u'上传成功'})
def html(self,result):
print result
self.write(json.dumps( result ,separators=(',',':')))
#html = '<script type="text/javascript">window.parent.CKEDITOR.tools.callFunction('+str(fn)+', \''+fileurl+'\', \''+msg+'\');</script>'
#html = '<script type="text/javascript">alert(\''+str(fn)+', '+fileurl+', '+msg+'\');</script>'
#self.write(html)
class Index(tornado.web.RequestHandler):
def get(self):
self.render('web.html')
class Other(tornado.web.RequestHandler):
def get(self, s):
self.write('error!')
def ip(self, ifname):
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
return socket.inet_ntoa(fcntl.ioctl(
s.fileno(),
0x8915,
struct.pack('256s', ifname[:15])
)[20:24])
settings = {
'static_path' : os.path.join(os.getcwd(),"static"),
}
application = tornado.web.Application([
(r"/", Index ),
(r"/websocket", web),
(r"/upload", Upload),
(r"/(.*?)", Other),
], **settings )
if __name__ == "__main__":
application.listen(8888)
tornado.ioloop.IOLoop.instance().start()
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
【作品名称】:基于Python与HTML5实现的websocket聊天室 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】: webchat 一个机遇WebSocket的聊天室,后端用Python编写。只要浏览器支持WebSocket即可。 功能: 查看在线人数 清屏 拖拽图片 修改背景颜色 修改前景颜色 发送远程图片 表情 特点: 是一个类似于linux操作界面的聊天室,完全通过键盘操作,而不需要鼠标。 一个机遇WebSocket的聊天室,后端用Python编写。只要浏览器支持WebSocket即可。 功能: 查看在线人数 清屏 拖拽图片 修改背景颜色 修改前景颜色 发送远程图片 表情 特点: 是一个类似于linux操作界面的聊天室,完全通过键盘操作,而不需要鼠标。 【资源声明】:本资源作为“参考资料”而不是“定制需求”,代码只能作为参考,不能完全复制照搬。需要有一定的基础能够看懂代码,能够自行调试代码并解决报错,能够自行添加功能修改代码。
资源推荐
资源详情
资源评论
收起资源包目录
webchat-master.zip (29个子文件)
webchat-master
README 336B
main.py 5KB
web.html 1KB
static
jquery.json-2.4.min.js 2KB
loading.gif 13KB
web.js 17KB
jquery-1.9.1.min.js 90KB
ico
12.gif 3KB
6.gif 4KB
8.gif 4KB
14.gif 10KB
0.gif 5KB
20.gif 7KB
21.gif 11KB
7.gif 5KB
19.gif 1KB
5.gif 3KB
18.gif 13KB
2.gif 5KB
9.gif 2KB
15.gif 6KB
3.gif 4KB
11.gif 8KB
1.gif 1KB
16.gif 3KB
13.gif 2KB
4.gif 2KB
10.gif 2KB
17.gif 6KB
共 29 条
- 1
资源评论
小英子架构
- 粉丝: 1025
- 资源: 4126
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 【全年行事历】行政部全年活动计划表- A公司.xls
- 【全年行事历】活动复盘表.xlsx
- 【全年行事历】活动推广进度表.xlsx
- 【全年行事历】旅游团建行程安排表-XX山.xlsx
- 【全年行事历】旅行团建活动方案.pptx
- 【全年行事历】某公司团建活动方案-【户外烧烤】.doc.baiduyun.uploading.cfg
- 【全年行事历】企业文化年度活动计划表.xlsx
- 【全年行事历】年度员工关怀计划表.xlsx
- 【全年行事历】年度行政活动计划表.xlsx
- 【全年行事历】企业团队建设活动策划.pptx
- 【全年行事历】全年活动计划.xls
- 【全年行事历】团队建设企业文化行事历——工作计划.xlsx
- 【全年行事历】企业员工夏季团建活动策划一天.pptx
- 【全年行事历】团建费用分析.xlsx
- 【全年行事历】团建行程安排及出行清单.xlsx
- 【全年行事历】团建活动采购预算清单.xlsx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功