如何使用Python实现多任务版的udp聊天器

本篇文章将为大家分享一下如何使用Python实现多任务版的udp聊天器,结合具体案例形式分析了Python基于udp的聊天器功能相关实现与使用技巧,有需要的小伙伴可以参考一下。

一、案例示例

二、案例说明

1、编写一个有2个线程的程序。

2、线程1用来接收数据然后显示。

3、线程2用来检测键盘数据然后通过udp发送数据。

三、参考代码

import socket
import threading


def send_msg(udp_socket):
   """获取键盘数据,并将其发送给对方"""
   while True:
       # 1. 从键盘输入数据
       msg = input("\n请输入要发送的数据:")
       # 2. 输入对方的ip地址
       dest_ip = input("\n请输入对方的ip地址:")
       # 3. 输入对方的port
       dest_port = int(input("\n请输入对方的port:"))
       # 4. 发送数据
       udp_socket.sendto(msg.encode("utf-8"), (dest_ip, dest_port))


def recv_msg(udp_socket):
   """接收数据并显示"""
   while True:
       # 1. 接收数据
       recv_msg = udp_socket.recvfrom(1024)
       # 2. 解码
       recv_ip = recv_msg[1]
       recv_msg = recv_msg[0].decode("utf-8")
       # 3. 显示接收到的数据
       print(">>>%s:%s" % (str(recv_ip), recv_msg))


def main():
   # 1. 创建套接字
   udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
   # 2. 绑定本地信息
   udp_socket.bind(("", 7890))

   # 3. 创建一个子线程用来接收数据
   t = threading.Thread(target=recv_msg, args=(udp_socket,))
   t.start()
   # 4. 让主线程用来检测键盘数据并且发送
   send_msg(udp_socket)


if __name__ == "__main__":
   main()

原创文章,作者:晴川运维,如若转载,请注明出处:https://baike.qcidc.com/10609.html

(0)
晴川运维晴川运维
上一篇 2025年6月26日
下一篇 2025年6月26日

相关推荐

  • Python退出时强制运行一段代码具体方法

    设想这样一个场景,你要给一个项目开发测试程序,程序开始运行的时候,会创建初始环境,测试完成以后,会清理环境。 这段逻辑本身非常简单: setup() test() clean() …

    Linux系统 2025年6月8日
  • Ubuntu下查看路由表具体方法

    路由表的主要作用是供路由器查找目标网络,进而确定转发接口及下一跳路由,完成数据包的转发功能,在本篇文章中将为大家讲解一下如何在Ubuntu中查看网络路由表的具体方法。 什么是Lin…

    Linux系统 2025年6月4日
  • Linux lsblk命令实例

    lsblk命令用来查看block设备的信息.主要应用场景: 获取wwnid,获取块设备列表,获取块设备类型(ssd,hdd),获取块设备的size等信息。 系统环境 Centos7…

    Linux系统 2025年6月11日
  • Docker中安装Redmine具体步骤

    Redmine是一个开源的、基于Web的项目管理和缺陷跟踪工具。它用日历和甘特图辅助项目及进度可视化显示。同时它又支持多项目管理,下面为大家分享一下Docker中安装Redmine…

    Linux系统 2025年6月12日
  • Linux 系统中修复 SambaCry 漏洞(CVE-2017-7494)

    Samba 很久以来一直是为 *nix 系统上的 Windows 客户端提供共享文件和打印服务的标准。家庭用户,中型企业和大型公司都在使用它,它作为最佳解决方案在多种操作系统共存的…

    Linux系统 2025年7月2日
  • Redis特殊数据类型:HyperLogLog使用方法

    redis是一个开源的,先进的key-value存储,属于非关系型缓存数据库,通常被称为数据结构服务器。Redis 中有三种特殊数据类型:Bitmaps、HyperLogLog、G…

    Linux系统 2025年6月4日
  • 详解grep命令的排除功能

    grep命令是linux中一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。 在一个或多个文件中搜素字符串模式,如果字符串模式包括空格,也必须被引用,模式后…

    Linux系统 2025年6月8日
  • 详解python字典和结构化数据

    5.1 字典数据类型 字典的索引可以使用许多不同类型的数据,不只是整数。字典的索引被称为“键”,键及其关联的值称为“键—值”对,在代码中,字典输入时带花括号{}。 字典中的表项是不…

    Linux系统 2025年6月8日
  • 讲解一下C 语言布尔类型

    C语言就没有真正的布尔类型,布尔类型实际上是用数值型(int,float,char等)表示的,不能自动打印为true或者false,只能自己写代码实现。 C 语言标准(C89) 没…

    Linux系统 2025年6月8日
  • Shell test命令(Shell [])详解,附带所有选项及说明

    test 是 Shell 内置命令,用来检测某个条件是否成立。test 通常和 if 语句一起使用,并且大部分 if 语句都依赖 test。 test 命令有很多选项,可以进行数值…

    Linux系统 2025年6月8日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注