多线程版聊天 | 学习笔记

简介: 快速学习 多线程版聊天

开发者学堂课程【Python入门 2020年版多线程版聊天】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/639/detail/10466


多线程版聊天


内容介绍

.接收与发送代码

.转换接收显示

.操作

.最终代码


.接收与发送代码

import socket

s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

s.sendto('早上好'.encode('utf8'),('192.168.31.199'9090))

//发送消息

data = s.recvfrom(1024)//接收消息

print(data)

s.close()

可以发送和接收消息

运行结果为:

image.png


.转换接收显示

1.代码

import socket

S=socket.socket(socket.AF INET, socket.SOCK DGRAM)

s.sendto('早上好'.encode('utf8'),('192.168.31.199'9090))

#data 的数据类型是一个元组

#元组里第0个元素是接收到的数据

#元组里第1个元素是发送方的 ip 地址和端口号

data,addr=s.recvfrom(1024)

print('接收到了{}地址{}端口的消息:

{}'.format(addr[0],addr[1],data.decode('utf8))

s.close()

2.改变后的页面

image.png

但是此代码只能聊天聊一次,一直聊天要添加死循环,且只能用此窗口给别人发消息,其他人不能给此客户端发送


.操作

1.先绑定地址和端口号添加 s.bind(('192.168.31.199'8080))

用我们所写的 py 文件代码(端口号8080)和网络调试助手(端口号9090)发送和接收消息

image.png

image.png

2、加入 while true 死循环

此时运行只能单方面聊天

3.添加输入 exit 终止聊天功能

if msg == 'exit':

break

此时运行时输入 exit 聊天会被终止,但这时代码并没有停止运行,而是等待网络调试助手发消息,网络调试助手发完消息后此代码停止运行。

这时此代码只能接收一次,所以要再添加 while true 死循环可以继续接收消息。

4.加入循环使窗口可以一直接收消息

def send_msg()://用于发送消息

def recv_msg()://用于接收消息

加入两个线程

发送 t1=threading.Thread(target=send_msg)

接收 t2=threading.Thread(target=recv_msg)

t1.start()

t2.start()

这时运行代码发送和接收的消息在同一位置,容易混乱

5.将接收消息打印到添加的文件里

添加文件 file=open('消息记录.txt','a',encoding='utf8'))

将消息打印到文件中 print('接收到了{}地址{}端口的消息:

{}'.format(addr[0],addr[1],data.decode('utf8’)))


.最终代码

import socket, sys

import threading

s=socket.socket(socket.AFINET,socket.SOCK_DGRAM) s.bind(('192.168.31.199',8080))

def send_msg():

//用于发送消息

while True:

msg=input('请输入您要发送的内容:)

s.sendto(msg.encode('utf8'),('192.168.31.199'9090))

if msg == 'exit':

break

def recv_msg()://用于接收消息

while True:

#data 的数据类型是一个元组

#元组里第0个元素是接收到的数据

#元组里第1个元素是发送方的 ip 地址和端口号

data,addr=s.recvfrom(1024)

print('接收到了{}地址{}端口的消息:

{}'.format(addr[0],addr[1],data.decode('utf8’)))

file=open('消息记录.txt','a',encoding='utf8'))

t1=threading.Thread(target=send_msg) t2=threading.Thread(target=recv_msg)

t1.start()

t2.start()

用网络调试助手接收消息

相关文章
|
算法 调度 索引
什么是多任务和线程?用线程写的一个udp同步聊天器
什么是多任务和线程?用线程写的一个udp同步聊天器
143 0
|
网络协议 Linux C++
Linux C/C++ 开发(学习笔记十一 ):TCP服务器(并发网络网络编程 一请求一线程)
Linux C/C++ 开发(学习笔记十一 ):TCP服务器(并发网络网络编程 一请求一线程)
359 0
|
编解码 数据安全/隐私保护 计算机视觉
Opencv学习笔记(十):同步和异步(多线程)操作打开海康摄像头
如何使用OpenCV进行同步和异步操作来打开海康摄像头,并提供了相关的代码示例。
864 1
Opencv学习笔记(十):同步和异步(多线程)操作打开海康摄像头
多线程学习笔记
这篇文章是多线程学习笔记,涵盖了线程与进程的概念、多线程实现方式、线程状态、线程同步与不安全示例、死锁问题以及生产者与消费者问题等多线程编程的关键知识点。
多线程学习笔记
|
前端开发 定位技术
前端学习笔记202305学习笔记第二十三天-地图单线程配置
前端学习笔记202305学习笔记第二十三天-地图单线程配置
224 0
前端学习笔记202305学习笔记第二十三天-地图单线程配置
FFmpeg学习笔记(二):多线程rtsp推流和ffplay拉流操作,并储存为多路avi格式的视频
这篇博客主要介绍了如何使用FFmpeg进行多线程RTSP推流和ffplay拉流操作,以及如何将视频流保存为多路AVI格式的视频文件。
1403 0
|
NoSQL 网络协议 关系型数据库
redis-学习笔记(redis 单线程模型)
redis-学习笔记(redis 单线程模型)
135 3
|
安全 Java 编译器
多线程 (下) - 学习笔记2
多线程 (下) - 学习笔记
146 1
|
存储 算法 Java
多线程 (下) - 学习笔记1
多线程 (下) - 学习笔记
125 1
|
设计模式 安全 NoSQL
多线程 (上) - 学习笔记2
多线程 (上) - 学习笔记
139 1