博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python基于Socket实现简单聊天室
阅读量:2442 次
发布时间:2019-05-10

本文共 3095 字,大约阅读时间需要 10 分钟。

Python基于Socket实现简单聊天室

服务端

#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time    : 2017/7/27 15:34# @File    : Server.py"""聊天室服务端"""import socket,selecthost=''port=7799addr=(host,port)inputs=[]members={}#配置服务端def start_Server():    server=socket.socket(socket.AF_INET,socket.SOCK_STREAM)    server.bind(addr)    server.listen(5)    return server#返回聊天室成员列表def show_members(w):    name_list=[]    for i in w:        name_list.append(w[i])    return name_list#处理新的成员def new_member(server):    client,addr=server.accept()    print('欢迎进入聊天室 ,%s,%s' % (client,addr))    try:        client.send('请输入名字')        name=client.recv(1024)        inputs.append(client)        members[client]=name        names='其它用户%s'% (show_members(members))        client.send(names)    except Exception,e:        print(e)#正式启动服务端def server_run():    server=start_Server()    print 'start'    inputs.append(server)    while True:        rs,ws,es=select.select(inputs,[],[])        for temp in rs:            if temp is server:                new_member(temp)            else:                disConnect=False                try:                    data=temp.recv(1024)                    data=members[temp]+'说'+data                except socket.error:                    data=members[temp]+'离开'                    disConnect=True                if disConnect:                    inputs.remove(temp)                    print data                    for other in inputs:                        if other!=server and other!=temp:                            try:                                other.send(data)                            except Exception,e:                                print(e)                    del members[temp]                else:                    print data                    for other in inputs:                        if other!=server and other!=temp:                            try:                                other.send(data)                            except Exception,e:                                print(e)if __name__ == '__main__':    server_run()

客户端

#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time    : 2017/7/27 15:34# @File    : Client.py"""聊天室客户端"""import  socketimport  selectimport threadinghost='127.0.0.1'port=7799addr=(host,port)#配置连接def connect():    client=socket.socket()    client.connect(addr)    return client#显示用户列表def show_member(s):    my=[s]    while True:        rs,ws,es=select.select(my,[],[])        if s in rs:            try:                print s.recv(1024)            except socket.error:                print 'socket is error'                exit()#进行对话def talk(s):        while True:            try:                info=raw_input('>>>')            except Exception:                print 'can\'t input'                exit()            try:                s.send(info)            except Exception,e:                print e                exit()#主函数def main():    client=connect()    t=threading.Thread(target=show_member,args=(client,))    t.start()    t1=threading.Thread(target=talk,args=(client,))    t1.start()if __name__ == '__main__':    main()

转载地址:http://jtcqb.baihongyu.com/

你可能感兴趣的文章
golang中使用指针_了解Go中的指针
查看>>
盖茨比乔布斯_使用盖茨比的useStaticQuery挂钩的快速指南
查看>>
如何在Go中定义和调用函数
查看>>
react 分页_如何使用React构建自定义分页
查看>>
angular 模块构建_使用传单在Angular中构建地图,第4部分:形状服务
查看>>
服务周期性工作内容_使服务工作者生命周期神秘化
查看>>
如何在Ubuntu 20.04上安装TensorFlow
查看>>
react项目设置全局变量_如何使用宗地设置React项目
查看>>
如何在Python 3中使用sqlite3模块
查看>>
如何在Node.js中编写异步代码
查看>>
nuxt.js 全局 js_如何在Nuxt.js应用程序中实现身份验证
查看>>
优雅编写js条件语句_如何在Go中编写条件语句
查看>>
debian文件系统_如何在Debian 10上设置文件系统配额
查看>>
angular id标记_使用传单在Angular中构建地图,第2部分:标记服务
查看>>
命令行基础知识:使用ImageMagick调整图像大小
查看>>
通过Angular,Travis CI和Firebase托管进行连续部署
查看>>
debian docker_如何在Debian 10上安装和使用Docker
查看>>
python pyenv_如何使用Pyenv和Direnv管理Python
查看>>
react 实现滚动加载_如何在React中实现平滑滚动
查看>>
报纸打字项目_如何使用打字稿设置节点项目
查看>>