群聊服务端

服务端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实现群聊天小程序代码的更多相关文章

  1. Netty学习——基于netty实现简单的客户端聊天小程序

    Netty学习——基于netty实现简单的客户端聊天小程序 效果图,聊天程序展示 (TCP编程实现) 后端代码: package com.dawa.netty.chatexample; import ...

  2. Python flask构建微信小程序订餐系统✍✍✍

    Python flask构建微信小程序订餐系统  整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程本身没问题, ...

  3. python实现串口通讯小程序(GUI界面)

    python实现串口通讯小程序(GUI界面) 使用python实现串口通讯需要使用python的pyserial库来实现,这个库在安装python的时候没有自动进行安装,需要自己进行安装. 1.安装p ...

  4. python爬取微信小程序(实战篇)

    python爬取微信小程序(实战篇) 本文链接:https://blog.csdn.net/HeyShHeyou/article/details/90452656 展开 一.背景介绍 近期有需求需要抓 ...

  5. 类似微信聊天小程序-网易云信,IM DEMO小程序版本

    类似微信聊天小程序-网易云信,IM DEMO小程序版本 代码地址: https://github.com/netease-im/NIM_Web_Weapp_Demo 云信IM DEMO 小程序版本 ( ...

  6. 小程序代码包压缩 策略&方案

    微信小程序自推出以来,逐渐发展,目前正受到越来越多的青睐.其中很重要的一点得益于小程序的轻量级特性,每个小程序最多不超过2MB,招之即来挥之即去,相比于几十上百兆的APP,用户进入小程序,或者说,小程 ...

  7. 微信小程序代码构成

    一.小程序代码 app.json 是当前小程序的全局配置,包括了小程序的所有页面路径.界面表现.网络超时时间.底部tab等. { "pages":[ "pages/ind ...

  8. [Socket]Socket聊天小程序

    一个简单是Socket聊天小程序,读写操作在不同的线程中.服务器端采用线程池. 1.Server import java.io.IOException; import java.net.ServerS ...

  9. Netty 聊天小程序

    这节讲解基于 Netty 快速实现一个聊天小程序. 一.服务端 1. SimpleChatServerHandler(处理器类) 该类主要实现了接收来自客户端的消息并转发给其他客户端. /** * 服 ...

随机推荐

  1. Kafka技术原理知识点总结

    1.Kafka是由Linkedin公司开发的,使用Scala语言编写的,分布式,多副本,多分区的,发布订阅模式的消息系统,他通常用于日志系统的搭建,2.Kafka和Zookeeper:Kafka通过Z ...

  2. ES6 —— entries(),keys()和values()

    ES6 提供三个新的方法 —— entries(),keys()和values() —— 用于遍历数组.它们都返回一个遍历器对象,可以用for...of循环进行遍历,唯一的区别是keys()是对键名的 ...

  3. idea2019版与maven3.6.2版本不兼容引发的血案

    昨天遇到了点问题解决浪费了一些时间(导致更新内容较少)回顾下问题 项目出现Unable to import maven project: See logs for details 翻了好多博客 莫名的 ...

  4. 讲真,MySQL索引优化看这篇文章就够了

    本文主要讨论MySQL索引的部分知识.将会从MySQL索引基础.索引优化实战和数据库索引背后的数据结构三部分相关内容,下面一一展开. 一.MySQL——索引基础 首先,我们将从索引基础开始介绍一下什么 ...

  5. windows下bower init 报错: bower ENOINT Register requires an interactive shell

    windows下bower初始化时不应该在git bash中,而应该在cmd下打开的dos窗口中进行

  6. [BZOJ1054] 移动玩具

    1054: [HAOI2008]移动玩具 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2741  Solved: 1537[Submit][Stat ...

  7. 安装docker 在centos中

    http://www.imooc.com/article/16448 http://blog.csdn.net/jeffleo/article/details/70904368

  8. opencv实践::对象计数

    问题描述 真实案例,农业领域经常需要计算对象个数 或者在其它领域拍照自动计数,可以提供效率,减低成本 解决思路 通过二值分割+形态学处理+距离变换+连通区域计算 #include <opencv ...

  9. python中如何通过报错信息定位问题(异常传播轨迹)

    class SelfException(Exception): pass def main(): firstMethod() def firstMethod(): secondMethod() def ...

  10. Arduino学习笔记① 初识Arduino

    1.前言     近段时间,博主陆续更新了ESP8266学习笔记,主要开发平台是Arduino.但是,对于很多无基础的初学者来说,甚至不了解Arduino是什么.因此,博主决定加入一个Arduino学 ...