Python实现群聊天小程序代码
群聊服务端
服务端Server.py代码如下:
# -*- coding: utf-8 -*-
#!/usr/bin/env python
# @Time : 2018/5/18 16:05
# @Desc : 群聊服务端
# @File : Server.py
# @Software: PyCharm
import socket, select
host = socket.gethostname()
port = 5999
addr = (host, port)
inputs = []
fd_name = {} """
遍历群成员
"""
def who_in_room(w):
name_list = []
for k in w:
name_list.append(w[k])
return name_list """
连接
"""
def conn():
print "服务端开始运行"
ss = socket.socket()
ss.bind(addr)
ss.listen(5)
return ss """
添加新的群成员
"""
def new_coming(ss):
client, add = ss.accept()
print '欢迎 %s %s' % (client, add)
wel = '''欢迎进入聊天室 . 请输入你的名字:'''
try:
client.send(wel)
name = client.recv(1024)
inputs.append(client)
fd_name[client] = name
nameList = "已在线聊天的群成员是 %s" % (who_in_room(fd_name))
client.send(nameList)
except Exception, e:
print e """
遍历聊天信息
"""
def server_run():
ss = conn()
inputs.append(ss)
while True:
r, w, e = select.select(inputs, [], [])
for temp in r:
if temp is ss:
new_coming(ss)
else:
disconnect = False
try:
data = temp.recv(1024)
data = fd_name[temp] + " 说 : "+ data
except socket.error:
data = fd_name[temp] + "离开聊天室"
disconnect = True
if disconnect:
inputs.remove(temp)
print data
for other in inputs:
if other != ss and other != temp:
try:
other.send(data)
except Exception, e:
print e
del fd_name[temp]
else:
print data
for other in inputs:
if other != ss and other != temp:
try:
other.send(data)
except Exception, e:
print e if __name__ == '__main__':
server_run()
群聊客户端
客户端Client.py代码如下:
# -*- coding: utf-8 -*-
#!/usr/bin/env python
# @Time : 2018/5/18 16:06
# @Desc : 群聊客户端
# @File : Client.py
# @Software: PyCharm import socket, select, threading
host = socket.gethostname()
addr = (host, 5999) """
连接
"""
def conn():
s = socket.socket()
s.connect(addr)
return s """
获取群成员
"""
def lis(s):
my = [s]
while True:
r, w, e = select.select(my, [], [])
if s in r:
try:
print s.recv(1024)
except socket.error:
print "通信出现异常"
exit() """
输入聊天
"""
def talk(s):
while True:
try:
info = raw_input()
except Exception, e:
print 'can\'t input'
exit()
try:
s.send(info)
except Exception, e:
print e
exit() """
主函数,创建聊天和获取群成员线程
"""
def main():
ss = conn()
t = threading.Thread(target=lis, args=(ss,))
t.start()
t1 = threading.Thread(target=talk, args=(ss,))
t1.start() if __name__ == '__main__':
main()
先启动服务端代码,后启动客户端(启动一个,代表一个群成员,可多个)代码,执行结果如下:
Python实现群聊天小程序代码的更多相关文章
- Netty学习——基于netty实现简单的客户端聊天小程序
Netty学习——基于netty实现简单的客户端聊天小程序 效果图,聊天程序展示 (TCP编程实现) 后端代码: package com.dawa.netty.chatexample; import ...
- Python flask构建微信小程序订餐系统✍✍✍
Python flask构建微信小程序订餐系统 整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程本身没问题, ...
- python实现串口通讯小程序(GUI界面)
python实现串口通讯小程序(GUI界面) 使用python实现串口通讯需要使用python的pyserial库来实现,这个库在安装python的时候没有自动进行安装,需要自己进行安装. 1.安装p ...
- python爬取微信小程序(实战篇)
python爬取微信小程序(实战篇) 本文链接:https://blog.csdn.net/HeyShHeyou/article/details/90452656 展开 一.背景介绍 近期有需求需要抓 ...
- 类似微信聊天小程序-网易云信,IM DEMO小程序版本
类似微信聊天小程序-网易云信,IM DEMO小程序版本 代码地址: https://github.com/netease-im/NIM_Web_Weapp_Demo 云信IM DEMO 小程序版本 ( ...
- 小程序代码包压缩 策略&方案
微信小程序自推出以来,逐渐发展,目前正受到越来越多的青睐.其中很重要的一点得益于小程序的轻量级特性,每个小程序最多不超过2MB,招之即来挥之即去,相比于几十上百兆的APP,用户进入小程序,或者说,小程 ...
- 微信小程序代码构成
一.小程序代码 app.json 是当前小程序的全局配置,包括了小程序的所有页面路径.界面表现.网络超时时间.底部tab等. { "pages":[ "pages/ind ...
- [Socket]Socket聊天小程序
一个简单是Socket聊天小程序,读写操作在不同的线程中.服务器端采用线程池. 1.Server import java.io.IOException; import java.net.ServerS ...
- Netty 聊天小程序
这节讲解基于 Netty 快速实现一个聊天小程序. 一.服务端 1. SimpleChatServerHandler(处理器类) 该类主要实现了接收来自客户端的消息并转发给其他客户端. /** * 服 ...
随机推荐
- Dubbo学习系列之十五(Seata分布式事务方案TCC模式)
上篇的续集. 工具: Idea201902/JDK11/Gradle5.6.2/Mysql8.0.11/Lombok0.27/Postman7.5.0/SpringBoot2.1.9/Nacos1.1 ...
- web前端Vue+Django rest framework 框架 生鲜电商项目实战视频教程 ☝☝☝
web前端Vue+Django rest framework 框架 生鲜电商项目实战视频教程 web前端Vue+Django rest framework 框架 生鲜电商项目实战视频教程 学习 ...
- Java名词术语---持续更新
在看技术文档的过程中,经常会出现新的java缩写术语,很多时候都不知道它们是什么,在这里记下,持续更新. ——————————————————————————————————————————————— ...
- Neo4j:图数据库GraphDB(四)Python中的操作
本文总结下Python中如何操作Neo4j数据库,用到py2neo包,Pip install 一下. 1 连接neo4j数据库:跟其它数据库一样,操作前必须输入用户名和密码及地址连接一下. from ...
- 新手也能看懂的 SpringBoot 异步编程指南
本文已经收录自 springboot-guide : https://github.com/Snailclimb/springboot-guide (Spring Boot 核心知识点整理. 基于 S ...
- Zeebe服务学习5-多实例特性实践
一.背景 在0.21版本之前,Zeebe不支持多实例元素,在2019年10月9号发布的0.21版本中,加入这一特性, 主要是体现在Zeebe Modeler 0.7.0以及之后的版本中. 二.特性介绍 ...
- opencv::模糊图像2
中值滤波 统计排序滤波器 中值对椒盐噪声有很好的抑制作用 medianBlur(Mat src, Mat dest, ksize) 双边滤波 均值模糊无法克服边缘像素信息丢失缺陷.原因是均值滤波是基于 ...
- 将JSON反序列化为指定的.NET类型
前言: 关于将JSON格式数据反序列化为指定的.NET类型数据常见的场景就是,关于网络请求获取请求成功的响应数据.本篇主要讲的的是如何通过使用Newtonsoft.Json中的JsonConvert. ...
- linux-scp命令及如何设置免密登录
部署测试环境时经常在两台服务器间copy文件,那么如何设置免密登录? 场景:源服务器A(如172) -> 目标服务器B(如71) 实现将服务器A的文件copy到服务器B 实现方式有两种: 在源 ...
- pycharm中如何为项目设置默认执行器?
一般来说,在python中如果定义了test开头的函数,pycharm会使用默认的执行器.如下方法可以修改默认执行器: file->Setting:打开setting设置页面