python网络聊天器多线程版

在之前的一篇文章(python网络编程-udp)中实现了一个简单的udp聊天器,只能在单线程下进行收发数据,在学习完多线程之后,实现一个能同时收发数据的udp聊天器。

说明:

  • 编写一个有2个线程的程序
  • 线程1用来接收数据然后显示
  • 线程2用来检测键盘数据然后通过udp发送数据

要求:

  1. 实现上述要求
  2. 总结多任务程序的特点

示例程序:

import socket
import threadingdef send_msg(udp_socket, dest_ip, dest_port):"""发送消息"""while True:send_data = input("请输入要发送的信息:")udp_socket.sendto(send_data.encode("utf-8"), (dest_ip, dest_port))def recv_msg(udp_socket):"""接收消息"""while True:recv_data = udp_socket.recvfrom(1024)recv_ip = recv_data[1]recv_msg = recv_data[0].decode("utf-8")print("\n>>%s:%s" % (recv_ip, recv_msg))def main():# 创建套接字udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)# 绑定本地端口udp_socket.bind(("", 8888))# 输入对方的ip和地址dest_ip  = input("请输入对方的ip:")dest_port = int(input("请输入对方的port:"))t1 = threading.Thread(target=send_msg, args=(udp_socket, dest_ip, dest_port))t1.start()t2 = threading.Thread(target=recv_msg, args=(udp_socket,))t2.start()if __name__ == "__main__":main()

终端运行结果:

$ python3 聊天器-多线程版.py 
请输入对方的ip:192.168.92.130
请输入对方的port:8080
请输入要发送的信息:hello
请输入要发送的信息:
>>('192.168.92.130', 8080):666

网络调试助手的结果:

1156642-20181214223910875-769435355.jpg

程序运行过程解析:

  • 首先创建套接字,并绑定到本地的端口8888
  • 输入要进行聊天的对方的ip和端口信息
  • 启动两个线程,一个线程用于发送数据,一个线程用于接收数据

转载于:https://www.cnblogs.com/zhangfengxian/p/python-chat-threading.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/351886.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CentOS 7 / RHEL 7 systemd 指令

CentOS 7 已经切换到 systemd,系统指令也有所变化。之前用于启动、重启、停止各种服务的service 作为向后兼容的指令还能使用,但是将来可能会消失。同时,chkconfig 也改成了systemctl 了。这里列举了一些常用的对应于 service 和 chkconfig 的…

隔离域逻辑

在一个设计模式类中,我对建模域逻辑进行了有趣的讨论。 具体来说,它与隔离域逻辑有关 。 应用程序通常分为三个部分: 演示(例如桌面GUI,浏览器,Web服务) 域逻辑 基础架构(例如持久…

2.基础

时间:2018年12月7日18:45:59 ----------------------------------------------------------------------------------- 1.字面常量:指数字或文本字符串,值不能被改变 (1)数字:整数,浮点数&…

vsco怎么两个滤镜叠加_PS插件 VSCO滤镜137款预设安装使用教程

文末获取资源VSCO是大名鼎鼎的手机滤镜,以其逼真的胶片文艺复古风爆红,vsco滤镜甚至被誉为照片调色界的业界良心(没有之一)。不过vsco滤镜虽然很好用但苦于一直没有电脑版本,许多摄影爱好者还会用手机调色后放进PS精修。VSCO面板可以在PS上完…

Tensorflow笔记(一)

1.交叉熵 在tensorflow中用:tf.nn.sigmoid_cross_entropy_with_logits()来表示跟sigmoid搭配使用的交叉熵。tf.nn.softmax_cross_entropy_with_logits()来表示跟softmax搭配使用的交叉熵。转载于:https://www.cnblogs.com/fzth-gfh/p/10123182.html

甘特图 知乎_如何使用 Excel 绘制甘特图?

————看了上面几张甘特图,基本上只实现了『计划』和『百分比进度』这两个概念,只有在理想化的一切按照计划发展的情况下才有参考价值。但是实际上执行会提前、也可能延期,进度实时都可能变更,我们应该分开考虑计划图和进度图的…

Kali 2.0 采用ssh连接登陆

Kali GNU/Linux 2.0 \n \l 安装完kali2.0 采用ssh远程连接尽然会出现“无法连接”的情况,下面就此情况来解决问题 第一步:编辑ssh配置文件 rootrslinux:~# vim /etc/ssh/sshd_config 第二步:重新启动ssh服务 rootrslinux:~# /etc/init.d/ssh …

3.运算符与表达式,控制流

时间:2018年12月8日14:56:25 -------------------------------------------------------------------------------------------- 表达式包括运算符与操作数 1、运算符 2、求值顺序 控制流(3种) 1、if语句 number 23 guess int(input…

英语口语练习系列-C37-服饰-询问年龄-沁园春-长沙

服饰 clothes or jewelryyour favorite clothes or jewelryjewelrynecklacebraceletearringsgolddiamondbeadbroochbanglecrystalfashionfashionablesuittrendstylishboutiqueuniquepersonalityinterestuniformoccupationindividualitycasual wearcomfortable clothestradition…

因此,甲骨文杀死了java.net

好吧,还没有……但是他们宣布要在2017年5月之前关闭java.net和 kenai。JohnK . Waters 在ADTmag的Kenai和java.net的“日落”一文中接受了我的采访。 由于Oracle几乎没有提供有关已经托管在java.net上的关键项目会发生什么情况的信息,因此本文中编写的大…

snmp的使用

freebsd7.1安装snmp cd /usr/ports/net-mgmt/net-snmp make make install net-snmp相关资料 http://www.net-snmp.cn/ Snmp分2种角色:SNMP管理站(manager,我们的本机127.0.0.1)和SNMP代理(agent,我们…

1个ieee1394端口_请问IEEE1394端口有什么作用?

匿名用户1级2007-07-31 回答IEEE1394标准是一种非专用的、高速的串行总线输入输出标准。它提供了一种连接数字设备的方法,包括个人计算机和用户电子硬件。它独立于平台,可以升级(可扩展),并在支持对等连接方面很灵活。IEEE1394标准无需将数字…

jsoup 获取html中body内容_Java 进阶 利用Jsoup获取HTML页面的各分页中的标题信息...

简单介绍一下JsoupJsoup是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于Xpath,jQuery的操作方法来取出和操作元素和数据。使用Jsoup,需要导入Jsoup所需Jar包&a…

在Windows下如何安装Tomcat服务器搭建

Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选服务器。 在Windows下安装Tomcat服务器的方式有两种,一种是直接安…

剑指offer-3(替换空格)

题目: 实现一个方法,把一个字符数组里面的空格全部替换为“20%”。 思路: 首先呢,要先获取字符数组中有多少个空格以及字符数组中字符的长度,计算出替换后的长度;然后,让一个虚拟指针indexOfNew…

5.模块

时间:2018-12-9 13:40:04 ---------------------------------------------------------- 1、方法 可以创建一个包含函数与变量的py文件 可以用C语言等编写python模块,编译后,在python中使用 import sys#通过import导入sys模块print(The co…

javaee 设计模式_JavaEE重新审视设计模式:装饰器

javaee 设计模式去年的这个时候,我写了一系列有关JavaEE设计模式实现的博客文章。 大约一年后,我意识到我错过了我最喜欢的图案装饰器。 装饰器模式基本上是通过装饰其他对象来扩展对象功能的方法,其他对象可以包装目标对象并为其添加行为。…

echarts label加边框_echarts 添加自定义label标签

1.echarts 自定义标签注:当设置visualMap的后,给覆盖regions单独定义的值(如果data 中没有regions的地区 则无妨,我这个是从data中删除青岛,但是lable 无法正常显示了,如有哪位大神有好的方法,请赐教)initC…

【15】docker

docker 一种容器技术,相当于 java 一侧编译多个场所运行的技术 ,简单理解为一个盒子,盒子里面包裹着一个操作系统及其配置 docker 语法 #查看容器 docker ps -a #查看镜像docker images # 创建 dockerdocker run image #启动docker并且…

解析URI与URL之间的区别与联系

URI就是一种资源定位机制,它是比较笼统地定位了资源,并不局限于客户端和服务器,而URL就定位了网上的一切资源,只要是网上的资源,都有唯一的URL 今天在看STRUTS配置的时候,发现一个问题,就是在看…