用Python写一个聊天室

功能 : 类似qq群聊

1. 进入聊天室需要输入姓名,姓名不能重复

2. 有人进入聊天室会向其他人发送通知

xxx 进入了聊天室

3. 一个人发消息,其他人会收到消息

xxx 说 : xxxxxxxx

4. 某人退出聊天室,其他人也会收到通知

xxx 退出了聊天室

先看我写的代码的运行结果:

准备文件:

tcp_s.py 服务端代码

tcp_c.py  用户端代码

tcp_s.py 代码:

from socket import *

from time import sleep

from select import *

import os

import sys

s = socket(AF_INET,SOCK_STREAM,0) #创建套接字对象

s.setsockopt(SOL_SOCKET,SO_REUSEADDR,1) #设置端口可重用

s.bind(('0.0.0.0',8888)) #绑定IP和端口号

s.listen(10) #设置最大可连接数

rlist = [s] #设置 读列表

wlist = [] #设置 写列表

xlist = [] #设置 出错列表

while True: #无限接收用户端信息

rs,ws,xs = select(rlist,wlist,xlist) #将s对象托管给select对象

for r in rs: #遍历返回的对象列表

if r is s: #如果对象是 s 套接字对象(服务端本身)

c,addr = s.accept() #与用户端连接

rlist.append(c) #将此用户对象保存起来

else:#如果对象是 c 套接字对象(用户端)

data = r.recv(1024).decode() #最大一次性接收1024字节,并将接收的内容转化为UTF8

if not data: #如果传过来没有数据,则认为是用户端已断开

rlist.remove(r) #将读列表中的此用户删除

else:#如果有数据传过来,则做相应处理

data = data.split('_:_') #拆分姓名和说话内容为一个列表

print(data) #打印列表

if data[1] == '': #如果没有传过来说话内容,则说明是第一次连接

data = data[0] + ' 进入聊天室' #生成 某某进入聊天室 的提示信息

for x in rlist: #遍历所有的 套接字对象

if x is s: #如果遍历到的套接字对象是服务端自己的对象,则略过

pass

else:#如果遍历到的套接字对象是用户端的对象,则发送消息(给所有用户发送一条 某某进入聊天室 的消息)

x.send(data.encode()) #发送消息

else: #如果有说话内容传入,则处理

data = data[0]+'说:'+data[1] #拆分说话人姓名和说话内容 保存为一个列表

for x in rlist: #遍历所有的 套接字对象

if x is s: #如果遍历到的套接字对象是服务端自己的对象,则略过

pass

else:#如果遍历到的套接字对象是用户端的对象,则发送消息(给所有用户发送一条 某某说:XXXXX 的消息)

x.send(data.encode()) #发送消息

tcp_c.py代码:

from socket import *

from time import sleep

from select import *

import os

s = socket(AF_INET,SOCK_STREAM,0) #创建套接字对象

addr = ('127.0.0.1',8888) #设置连接地址信息

name = input('请输入姓名>>') #要求输入姓名

s.connect(addr) #连接至服务端

info = name + '_:_' #设置信息的格式

s.send(info.encode()) #将名字发送至服务端

rlist = [s] #设置 读列表

wlist = [] #设置 写列表

xlist = [] #设置 出错列表

pid = os.fork() #开启一个子进程,用于专门接收从服务端传过来的对话数据

if pid == 0: #如果是子进程(用于处理服务端数据的进程)

while True: #无限接收服务端信息

rs,ws,xs = select(rlist,wlist,xlist)

e = 0 #设置一个标记 值 为0

for r in rs: #遍历所有的套接字对象

if r is s: #如果遍历到的套接字对象是 本模块的对象

data = r.recv(1024).decode() #接收从服务器传过来的数据

if not data: #如果没有数据,则说明服务端要断开

e = 1 #设置标记值为1

else:#如果有数据,则打印

print(data)#打印出数据

if e == 1: #如果标记被改为1,说明要断开,则跳出循环

break

else:#循环结束时打印一条消息

print('子结束')

elif pid > 0: #如果是当前进程(用于发送消息的进程)

while True: #无限处理要发送的信息

rs,ws,xs = select(rlist,wlist,xlist)

e = 0 #设置一个标记 值 为0

for r in rs: #遍历所有的套接字对象

if r is s: #如果遍历到的套接字对象是 本模块的对象

info = input('') #等待用户输入信息

if not info: #如果没有输入任何信息,则代表用户想要断开连接

e = 1 #设置标记值为1

info = name + '_:_退出了聊天室' #生成一条给服务端的信息

r.send(info.encode()) #最后再给服务端发送一句退出的消息

else: #如果有输入数据,则处理

info = name + '_:_' + info #将数据拼接成相应的格式

r.send(info.encode()) #将数据发送给服务端

if e == 1:  #如果标记被改为1,说明要断开,则跳出循环

break

print('父结束') #循环结束时打印一条消息

else:

print('ERROR',pid)

s.close()

print('结束')

php仿qq群聊,用Python写一个类似qq群聊的聊天室相关推荐

  1. python软件代码示例-用Python写一个模拟qq聊天小程序的代码实例

    Python 超简单的聊天程序 客户端: import socket, sys host = '10.248.27.23' # host = raw_input("Plz imput des ...

  2. 能不能用python开发qq_用Python写一个模拟qq聊天小程序的代码实例

    用Python写一个模拟qq聊天小程序的代码实例 发布时间:2020-09-09 07:49:29

  3. 用Python写一个模拟qq聊天小程序的代码实例

    前言 今天小编就为大家分享一篇关于用Python写一个模拟qq聊天小程序的代码实例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧 Python 超简单的聊天 ...

  4. 用python做毕业设计小程序_用Python写一个模拟qq聊天小程序的代码实例

    Python 超简单的聊天程序 客户端: import socket, sys host = '10.248.27.23' # host = raw_input("Plz imput des ...

  5. 如何利用python实现qq聊天_用Python写一个模拟qq聊天小程序的代码实例

    Python 超简单的聊天程序 客户端: import socket, sys host = '10.248.27.23' # host = raw_input("Plz imput des ...

  6. python写一个系统-熬了一晚上,小白用Python写了一个股票提醒系统

    码农小马七夕节去相亲了,见了一个不错的姑娘,长的非常甜美!聊着聊着很投缘!通过介绍人了解到,对方也很满意--想着自己单身多年的生活就要结束啦,心里满是欢喜,美美哒!但是突然想起年初还有几万块在股市里面 ...

  7. 用python写聊天机器人_用Python 写一个机器人陪你聊天(文尾有彩蛋)

    工作一忙,原来秉烛夜谈的好友现在都很少聊天,微信都成了微信群的天下,鲜有微信好友给你发消息,想要主动发却也找不到开题话题,怎么办?用Python写一个机器人陪自己聊聊天吧.以下是源码及解析,小白都看得 ...

  8. 用Python 写一个机器人陪你聊天(文尾有彩蛋)

    工作一忙,原来秉烛夜谈的好友现在都很少聊天,微信都成了微信群的天下,鲜有微信好友给你发消息,想要主动发却也找不到开题话题,怎么办?用Python写一个机器人陪自己聊聊天吧.以下是源码及解析,小白都看得 ...

  9. python写一个系统-使用Python写一个量化股票提醒系统

    大家在没有阅读本文之前先看下python的基本概念, Python是一种解释型.面向对象.动态数据类型的高级程序设计语言. Python由Guido van Rossum于1989年底发明,第一个公开 ...

最新文章

  1. Beautiful Array
  2. C语言哆啦a梦用printf输出,【2013.1.20】故事的最后,哆啦A梦终于又回到了大雄身边。从此两个人过上了…——ProtoType...
  3. ad19pcb所有元件都在报错_PLC的线圈输出和置复位,可以混用吗?很多人都会犯这个错误!...
  4. 还在担心没有服务器做不了数据分析?这个免费资源看一下!
  5. 班志杰内蒙古大学计算机学院,内蒙古大学计算机学院研究生导师简介-班志杰(博士)...
  6. JSP+Servlet--简易的博客功能开发
  7. LaTeX排版软件安装包及安装方法(texlive + TeXstudio)
  8. 解析小型机、大型机和PC服务器间的差别
  9. mysql中rpl_MySQL半同步复制之rpl_semi_sync_master_wait_point
  10. 建网站怎么选合适的网站模版
  11. EPMS- 让企业应用更加轻便!
  12. 随机点名册的简单程序
  13. python去重、根据某列统计另一列频数
  14. 红月之特装数据(转自官方)
  15. 如何区分哲学中的世界观和方法论
  16. 将日期转换成上中下旬
  17. 神仙级python入门教程(非常详细),从零基础入门到精通,建议收藏!
  18. 【Java】线程程序计数器
  19. 284、一个宽带如何装两个路由器?这三种方法都可以使用
  20. 漫漫人生录 | 程序员成年后最大的自律,是克制自己去纠正别人的欲望

热门文章

  1. AJAX框架衣柜收纳技巧,如何收纳整理衣服方便省事又不会乱——一用就爱上的衣柜整理法...
  2. 货车etc怎么免费办理?网上免费申请办理货车etc高速通行卡流程方法
  3. 鸿蒙归蝶的反弹,《诛仙2》蒙鸿试炼副本详细攻略
  4. 【JQuery】JQuery使用——网页作业
  5. python手机运行器_MobileNet教程:用TensorFlow搭建在手机上运行的图像分类器
  6. 连接mysql数据库字符串_MySQL数据库中怎么将字符串连接操作
  7. 查看计算机计划,处理器计划,手把手教你电脑处理器怎么查看
  8. 高效文本处理三剑客之一【grep】
  9. javaScript动态添加Li元素
  10. 五大PS图层使用技巧,图层还可以这样玩?