python使用websocket简单组建聊天室
server端
###websocket_server###
import socket
import threading sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.bind(('localhost', 900)) sock.listen(5)
print('Server', socket.gethostbyname('localhost'), 'listening ...') mydict = dict()
mylist = list() # 把whatToSay传给除了exceptNum的所有人
def tellOthers(exceptNum, whatToSay):
for c in mylist:
if c.fileno() != exceptNum:
try:
c.send(whatToSay.encode())
except:
pass def subThreadIn(myconnection, connNumber):
nickname = myconnection.recv(1024).decode()
mydict[myconnection.fileno()] = nickname
mylist.append(myconnection)
print('connection', connNumber, ' has nickname :', nickname)
tellOthers(connNumber, '【系统提示:' + mydict[connNumber] + ' 进入聊天室】')
while True:
try:
recvedMsg = myconnection.recv(1024).decode()
if recvedMsg:
print(mydict[connNumber], ':', recvedMsg)
tellOthers(connNumber, mydict[connNumber] + ' :' + recvedMsg) except (OSError, ConnectionResetError):
try:
mylist.remove(myconnection)
except:
pass
print(mydict[connNumber], 'exit, ', len(mylist), ' person left')
tellOthers(connNumber, '【系统提示:' + mydict[connNumber] + ' 离开聊天室】')
myconnection.close()
return while True:
connection, addr = sock.accept()
print('Accept a new connection', connection.getsockname(), connection.fileno())
try:
# connection.settimeout(5)
buf = connection.recv(1024).decode()
if buf == '':
connection.send(b'welcome to server!') # 为当前连接开辟一个新的线程
mythread = threading.Thread(target=subThreadIn, args=(connection, connection.fileno()))
mythread.setDaemon(True)
mythread.start() else:
connection.send(b'please go out!')
connection.close()
except:
pass
client端
#####socket_client####
import socket
import time
import threading sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect(('localhost', 900))
sock.send(b'')
print(sock.recv(1024).decode())
nickName = input('input your nickname: ')
sock.send(nickName.encode()) def sendThreadFunc():
while True:
try:
myword = input()
sock.send(myword.encode())
# print(sock.recv(1024).decode())
except ConnectionAbortedError:
print('Server closed this connection!')
except ConnectionResetError:
print('Server is closed!') def recvThreadFunc():
while True:
try:
otherword = sock.recv(1024)
if otherword:
print(otherword.decode())
else:
pass
except ConnectionAbortedError:
print('Server closed this connection!') except ConnectionResetError:
print('Server is closed!') th1 = threading.Thread(target=sendThreadFunc)
th2 = threading.Thread(target=recvThreadFunc)
threads = [th1, th2] for t in threads:
t.setDaemon(True)
t.start()
t.join()
测试结果

python使用websocket简单组建聊天室的更多相关文章
- JAVA WebSocKet ( 简单的聊天室 )
1, 前端代码 登入页 -> login.html <!DOCTYPE html> <html> <head> <meta charset=" ...
- Python Socket实现简单的聊天室
通过参考其他牛人的文章和代码, 再根据自己的理解总结得出, 说明已经加在注释中, FYI 主要参考文章: http://blog.csdn.net/dk_zhe/article/details/3 ...
- nodejs与websocket模拟简单的聊天室
nodejs与websocket模拟简单的聊天室 server.js const http = require('http') const fs = require('fs') var userip ...
- 基于websocket实现的一个简单的聊天室
本文是基于websocket写的一个简单的聊天室的例子,可以实现简单的群聊和私聊.是基于websocket的注解方式编写的.(有一个小的缺陷,如果用户名是中文,会乱码,不知如何处理,如有人知道,请告知 ...
- python + django + dwebsocket 实现简单的聊天室
使用库dwebsocket,具体参考此处 views.py: from dwebsocket.decorators import accept_websocket,require_websocket ...
- php+websocket搭建简易聊天室实践
1.前言 公司游戏里面有个简单的聊天室,了解了之后才知道是node+websocket做的,想想php也来做个简单的聊天室.于是搜集各种资料看文档.找实例自己也写了个简单的聊天室. http连接分为短 ...
- Java和WebSocket开发网页聊天室
小编心语:咳咳咳,今天又是聊天室,到现在为止小编已经分享了不下两个了,这一次跟之前的又不大相同,这一次是网页聊天室,具体怎么着,还请各位看官往下看~ Java和WebSocket开发网页聊天室 一.项 ...
- 简单的聊天室代码php+swoole
php swoole+websocket 客户端代码 <!DOCTYPE html> <html> <head> <title></title&g ...
- 使用Html5下WebSocket搭建简易聊天室
一.Html5WebSocket介绍 WebSocket protocol 是HTML5一种新的协议(protocol).它是实现了浏览器与服务器全双工通信(full-duplex). 现在,很多网站 ...
随机推荐
- 使用MagicAJax的AjaxPanel时有时会弹出"Using the AjaxCallHelper write methods outside of an AjaxCall is not allowed."
------解决方案--------------------------------------------------------1.看下你的输出是不是包含在<ajax:AjaxPanel I ...
- python大法好——变量、常量、input()、数据类型、字符串、格式化输出、运算符、流程控制语句、进制、字符编码
python基础知识 1.变量 变量:把程序运算的中间结果临时存到内存里,以备后面的代码可以继续调用. 作用:A.存储数据. B.标记数据. 变量的声明规则: A:变量名只能是字母,数字或下划线任意组 ...
- 访问服务器时一直在转圈,等待localhost响应
之后把zookeeper的服务器的防火墙关了,就有响应了.可能就是防火墙的问题.
- Oracle修改表或者字段的注释
转自:https://www.cnblogs.com/fx-blog/p/7132833.html 语句:comment on table 表名 is '表的注释信息'; comment on col ...
- js判断对象
一般学java的小伙伴,刚开始写js时如果遇到要判断一个字符串是否不为空,往往会这样写 if(str != undefined && str != null && st ...
- 解决 'Could not convert variant of type (NULL) into type (String)
写存储过程中有不允许为空的字段,在客户端转化取数时显示 Could not convert variant of type (NULL) into type (String) 可以在存储过程中使用is ...
- ReactiveX 学习笔记(3)转换数据流
Transforming Observables 本文的主题为转换 Observable 的操作符. 这里的 Observable 实质上是可观察的数据流. RxJava操作符(二)Transform ...
- 转: 日期格式参考extjs api文档中的Date类型
var md = new Ext.form.DateField({ //下面的格式是:2000-01-01 00:00:00 format: 'Y-m-d H:i:s', ............ } ...
- 多线程数据库查询(ADO)
ADO多线程数据库查询通常会出现3个问题: 1.CoInitialize 没有调用(CoInitialize was not called):所以,在使用任何dbGo对象前,必须手 调用CoIniti ...
- Hibernate 再接触 多对一与一对多
多对一单向关联 数据库设计: 错误做法:在多方加外键 在多这一方加外键 第一种 annotation Group.java package com.bjsxt.hibernate; import ja ...