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

说明:

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

要求:

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

示例程序:

import socket
import threading def 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

网络调试助手的结果:

程序运行过程解析:

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

python网络聊天器多线程版的更多相关文章

  1. 【Python网络编程】多线程聊天软件程序

    课程设计的时候制作的多线程聊天软件程序 基于python3.4.3 import socket import pickle import threading import tkinter import ...

  2. python 网络编程第三版

    为服务端增加多线程解决方案 1.服务端代码如下: ***这个版本并没有真正的起到多线程的作用,主要原因在于t.join():以后的版本会改进这个问题*** #!/usr/bin/python #!co ...

  3. 7.Python网络编程_多线程共享全局变量问题

    Python多线程支持全局变量的共享操作,但是它存在很多问题,先来看以下程序,该程序理论上执行完毕后全局变量g_num的值应该是2000000,但是在实际运行中,结果不足理论值 import thre ...

  4. python 网络编程第四版

    使用SocketServer 模块来完成服务端编程 1.服务端代码如下: #!/usr/bin/python #!coding:utf-8 import SocketServer as sockets ...

  5. python音乐播放器第二版

      此代码是上一期的改版 需要用到的Python库有 .pygame 2.time 3.xmusic(我自己写的用来做音乐索引) .colorama(美观) 推荐使用pip安装 方法: pip ins ...

  6. Python并发编程-SocketServer多线程版

    #server.py import socket from threading import Thread def chat(conn): conn.send(b'hello') msg = conn ...

  7. 8.Python网络编程_多线程死锁

    死锁:指两个或两个以上的线程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死 ...

  8. 2.Python网络编程_TCP(简略版)

    TCP监听套接字: 当新的客户端请求连接时,服务器端监听套接字收到消息,会分配一个新的套接字对应于客户端(新socket包括四部分:源IP.源端口号.目的IP.目的端口号)用于接收客户端的消息,仔细观 ...

  9. 1.Python网络编程_UDP(简略版)

    # -*- coding: utf-8 -*- #2019-11-24 import socket def recv(): udp_socket=socket.socket(socket.AF_INE ...

随机推荐

  1. centos7的Kubernetes部署记录

    一.使用vm创建了三个centos系统,基本细节如下: 1.1 修改三台机器对应的主机名: [root@localhost ~] hostnamectl --static set-hostname k ...

  2. 包建强的培训课程(4):App测试深入学习和研究

    @import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...

  3. 【渗透攻防WEB篇】SQL注入攻击初级

    前言不管用什么语言编写的Web应用,它们都用一个共同点,具有交互性并且多数是数据库驱动.在网络中,数据库驱动的Web应用随处可见,由此而存在的SQL注入是影响企业运营且最具破坏性的漏洞之一,这里我想问 ...

  4. 吴恩达机器学习笔记8-多变量线性回归(Linear Regression with Multiple Variables)--多维特征

    我们探讨了单变量/特征的回归模型,现在我们对房价模型增加更多的特征,例如房间数楼层等,构成一个含有多个变量的模型,模型中的特征为(

  5. puppet-master搭建

    puppet 搭建 Table of Contents 配置yum源 配置hosts 安装puppet-server 部署puppet-agent trouble-shoting 配置yum源 备份系 ...

  6. 基于C++Qt4开发的白鸽局域网聊天器

    开源项目Github链接:https://github.com/u014427391/chitchat1.0 欢迎star (1)群聊主界面,有工具栏,工具栏功能分别是发送文件.打开音乐播放器.保存聊 ...

  7. CSS3 Gradient 渐变还能这么玩

    浏览器支持两种类型的渐变:线性渐变 (linear-gradient),径向渐变 (radial-gradient) 渐变在 CSS 中属于一种 Image 类型,可以结合 background-im ...

  8. leetcode69 X的平方根的几种解法

    第一种自然就是调APi啦(手动滑稽) public int mySqrt(int x) { return (int)Math.sqrt(x); } 时间是52 ms,还超过了1/5的人呢 第二种 二分 ...

  9. 解决 Nginx 400 Bad Request 问题(WebSocket)

    400 Bad Request 是一种 HTTP 错误状态码.HTTP/1.1 对 400 Bad Request的定义主要是: 语义有误,当前请求无法被服务器理解 请求参数有误 丢包导致异常 Goo ...

  10. Dockerfile 中的 multi-stage(多阶段构建)

    在应用了容器技术的软件开发过程中,控制容器镜像的大小可是一件费时费力的事情.如果我们构建的镜像既是编译软件的环境,又是软件最终的运行环境,这是很难控制镜像大小的.所以常见的配置模式为:分别为软件的编译 ...