Python聊天小程序

文章介绍了如何使用Python编写一个简单的聊天程序,涉及服务端的多线程设计,包括接收和写入文件,以及客户端的接收和发送信息功能。通过socket模块实现网络通信,支持多个客户端连接。
摘要由CSDN通过智能技术生成

我们可以利用Python去写一个互相聊天的小程序,我们需要用到多线程和网络通信模块

服务端

import socket
import threading

def s_recv_chat_idea(conn):#发送信息的线程
    with open('chat.txt', 'r', encoding = 'utf-8') as f:
        f.seek(0, 2)
        while True:
            res = f.readline()
            if res:#判断是否有消息
                conn.sendall(res.encode('utf-8'))

def s_send_chat_idea(conn):#接受信息的线程
    with open('chat.txt', 'a+', encoding = 'utf-8') as f:
        while True:
            f.write(conn.recv(1024).decode('utf-8'))
            f.flush()#强制刷新接受的消息

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind(('0.0.0.0', 5000))
s.listen(5)

while True:
    conn, addr = s.accept()
    #启动线程
    threading.Thread(target = s_recv_chat_idea, args = (conn, ), daemon = True).start()
    threading.Thread(target = s_send_chat_idea, args = (conn, ), daemon = True).start()

服务端我们利用到了两个线程分别对一个用户进行服务,一个用于接受客户端发送的信息并写入文件,另一个用于将别人发送过来的信息发送给服务的客户端

客户端

import socket
import threading

def c_recv_chat_idea(c):#负责接受信息的线程
    while True:
        print(c.recv(1024).decode('utf-8'), end = '')

addr = input('服务器地址:').split(':')
c = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
c.connect((addr[0], int(addr[1])))
name = input('聊天用户名:')

threading.Thread(target = c_recv_chat_idea, args = (c, ), daemon = True).start()#启动线程

while True:
    msg = input('\r') + '\n'
    c.sendall((name + ':' + msg).encode('utf-8'))#将自己的用户名和信息一起发送过去

客户端在我们连接上服务器后会起一个接收服务器发送过来的信息的线程来达到别人发消息你也能实时接受的功能,在主线程发送消息给服务器来达到发送消息的功能。

接下来就可以用多个客户端连接服务器的ip和对应端口来进行聊天了!

  • 15
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值