python3利用socket和threading实现类似qq的多用户群聊

利用多线程threading实现简单的群聊服务器
服务端

import socket
import threading

users = {}
def msg_chat(cc, addr):
    userName = cc.recv(100000).decode('utf-8')
    users[userName] = cc
    print(userName + '已连接')
    for k, v in users.items():
        v.send((userName+'加入群聊').encode('utf-8'))
    while True:
        try:
            msg = cc.recv(100000).decode('utf-8')
            for k, v in users.items():
                v.send((userName+'说:\n' + msg).encode('utf-8'))
        except Exception:
            print(userName+'断开连接')
            del users[userName]
            for k, v in users.items():
                v.send((userName+'退出群聊').encode('utf-8'))
            break

def startServer():
    ss = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    ss.bind(('127.0.0.1', 9888))
    ss.listen(10)
    print('服务器已启动...')
    while True:
        cc, addr = ss.accept()
        st = threading.Thread(target=msg_chat, args=(cc, addr))
        st.start()

def runServer():
    r = threading.Thread(target=startServer)
    r.start()

if __name__ == '__main__':
    runServer()

客户端

import socket
import threading

ck = None
def recv_msg():
    while True:
        msg = ck.recv(100000).decode('utf-8')
        print(msg)
        if len(msg) == 0:
            ck.close()
            break

def connServer():
    global ck
    cc = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    cc.connect(('127.0.0.1', 9888))
    userName = '张三'
    cc.send(userName.encode('utf-8'))
    ck = cc
    st = threading.Thread(target=recv_msg)
    st.start()

def send_msg():
    while True:
        msg = input('输入消息:')
        ck.send(msg.encode('utf-8'))

if __name__ == '__main__':
    connServer()
    send_msg()

客户端多复制几份,修改用户名字

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值