【从零学习python 】82. 基于多线程的聊天程序实现

简介: 【从零学习python 】82. 基于多线程的聊天程序实现

多线程版聊天

导入所需模块和创建套接字

import socket
import threading
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind(('0.0.0.0', 8080))
  • 导入所需模块:socket用于网络通信,threading用于创建和管理线程。
  • 创建一个UDP套接字对象,使用IPv4地址族和数据报传输方式。
  • 将套接字绑定到本地所有IP地址的8080端口。

定义发送消息函数

def send_msg():
    ip = input('请输入您要聊天的ip:')
    port = int(input('请输入对方的端口号:'))
    while True:
        msg = input('请输入聊天内容:')
        s.sendto(msg.encode('utf-8'), (ip, port))
        if msg == "bye":
            ip = input('请输入您要聊天的ip:')
            port = int(input('请输入对方的端口号:'))
  • 定义一个名为send_msg的函数,用于发送消息。该函数运行在子线程中。
  • 通过用户输入获取目标IP地址和端口号。
  • 进入一个循环,不断读取用户输入的聊天内容。
  • 使用socket.sendto()方法将消息编码为UTF-8,并发送给指定的IP地址和端口号。
  • 如果用户输入的消息为"bye",则重新获取目标IP地址和端口号。

定义接收消息函数

def recv_msg():
    while True:
        content, addr = s.recvfrom(1024)
        print('接收到了{}主机{}端口的消息:{}'.format(addr[0], addr[1], content.decode('utf-8')),file=open('history.txt', 'a', encoding='utf-8'))
  • 定义一个名为recv_msg的函数,用于接收消息。该函数运行在子线程中。
  • 进入一个循环,不断接收数据报和发送方的地址。
  • 将接收到的内容解码为UTF-8,并打印出发送方的IP地址、端口号以及消息内容。
  • 将接收到的消息追加写入到名为history.txt的文件中。

创建发送线程和接收线程 综上所述,这段代码实现了一个多线程聊天程序。

send_thread = threading.Thread(target=send_msg)
recv_thread = threading.Thread(target=recv_msg)
send_thread.start()
recv_thread.start()
  • 创建一个名为send_thread的线程,目标函数为send_msg,用于发送消息。
  • 创建一个名为recv_thread的线程,目标函数为recv_msg,用于接收消息。
  • 启动发送线程和接收线程的执行。

该段代码实现了一个多线程聊天程序。通过创建两个线程,分别用于发送消息和接收消息,实现了同时进行消息发送和接收的功能。用户可以输入目标IP地址和端口号,并发送和接收消息。接收到的消息会被打印并保存到history.txt文件中。

相关文章
|
10天前
|
Python 容器
Python学习的自我理解和想法(9)
这是我在B站跟随千锋教育学习Python的第9天,主要学习了赋值、浅拷贝和深拷贝的概念及其底层逻辑。由于开学时间紧张,内容较为简略,但希望能帮助理解这些重要概念。赋值是创建引用,浅拷贝创建新容器但元素仍引用原对象,深拷贝则创建完全独立的新对象。希望对大家有所帮助,欢迎讨论。
|
1天前
|
Python
Python学习的自我理解和想法(10)
这是我在千锋教育B站课程学习Python的第10天笔记,主要学习了函数的相关知识。内容包括函数的定义、组成、命名、参数分类(必须参数、关键字参数、默认参数、不定长参数)及调用注意事项。由于开学时间有限,记录较为简略,望谅解。通过学习,我理解了函数可以封装常用功能,简化代码并便于维护。若有不当之处,欢迎指正。
|
9天前
|
安全 API C语言
Python程序的安全逆向(关于我的OPENAI的APIkey是如何被盗的)
本文介绍了如何使用C语言编写一个简单的文件加解密程序,并讨论了如何为编译后的软件添加图标。此外,文章还探讨了Python的.pyc、.pyd等文件的原理,以及如何生成和使用.pyd文件来增强代码的安全性。通过视频和教程,作者详细讲解了生成.pyd文件的过程,并分享了逆向分析.pyd文件的方法。最后,文章提到可以通过定制Python解释器来进一步保护源代码。
37 6
|
12天前
|
存储 索引 Python
Python学习的自我理解和想法(6)
这是我在B站千锋教育学习Python的第6天笔记,主要学习了字典的使用方法,包括字典的基本概念、访问、修改、添加、删除元素,以及获取字典信息、遍历字典和合并字典等内容。开学后时间有限,内容较为简略,敬请谅解。
|
12天前
|
Python
Python学习的自我理解和想法(7)
学的是b站的课程(千锋教育),跟老师写程序,不是自创的代码! 今天是学Python的第七天,学的内容是集合。开学了,时间不多,写得不多,见谅。
|
11天前
|
存储 安全 索引
Python学习的自我理解和想法(8)
这是我在B站千锋教育学习Python的第8天,主要内容是元组。元组是一种不可变的序列数据类型,用于存储一组有序的元素。本文介绍了元组的基本操作,包括创建、访问、合并、切片、遍历等,并总结了元组的主要特点,如不可变性、有序性和可作为字典的键。由于开学时间紧张,内容较为简略,望见谅。
|
12天前
|
索引 Python
Python学习的自我理解和想法(5)
这是我在B站千锋教育学习Python的第五天笔记,主要内容包括列表的操作,如排序(`sort()`、``sorted()``)、翻转(`reverse()`)、获取长度(`len()`)、最大最小值(`max()`、``min()``)、索引(`index()`)、嵌套列表和列表生成(`range`、列表生成式)。通过这些操作,可以更高效地处理数据。希望对大家有所帮助!
|
3天前
|
Shell 开发工具 Python
如何在vim里直接运行python程序
如何在vim里直接运行python程序
|
1月前
|
并行计算 数据处理 调度
Python中的并发编程:探索多线程与多进程的奥秘####
本文深入探讨了Python中并发编程的两种主要方式——多线程与多进程,通过对比分析它们的工作原理、适用场景及性能差异,揭示了在不同应用需求下如何合理选择并发模型。文章首先简述了并发编程的基本概念,随后详细阐述了Python中多线程与多进程的实现机制,包括GIL(全局解释器锁)对多线程的影响以及多进程的独立内存空间特性。最后,通过实例演示了如何在Python项目中有效利用多线程和多进程提升程序性能。 ####
|
1月前
|
监控 JavaScript 前端开发
python中的线程和进程(一文带你了解)
欢迎来到瑞雨溪的博客,这里是一位热爱JavaScript和Vue的大一学生分享技术心得的地方。如果你从我的文章中有所收获,欢迎关注我,我将持续更新更多优质内容,你的支持是我前进的动力!🎉🎉🎉
24 0