一个紧张刺激的聊天器,要不要进来看看(Python UDP网络模型)
先来哔哔两句:(https://jq.qq.com/?_wv=1027&k=QgGWqAVF)
互联网的本质是什么?其实就是信息的交换。那么如何将自己的信息发送到其他人的电脑上呢?那就需要借助网络模型来完成这样的事情了。
今天就带领大家使用UDP网络模型来完成一个简单的聊天器
主要内容 (https://jq.qq.com/?_wv=1027&k=QgGWqAVF)
python中的套接字实现
如何与Ubuntu建立通信
发送/接收消息
socket介绍 (https://jq.qq.com/?_wv=1027&k=QgGWqAVF)
socket套接字,Python内置模块
链接电脑并且接收/发送消息的一个对象socket两种类型:udp和tcp
udp:比较简单、不安全、丢包的情况、速度快
tcp:比较复杂的网络模型、安全、速度慢
QQ刚成立之初,所用的是UDP;微信使用的就是TCP
环境 (https://jq.qq.com/?_wv=1027&k=QgGWqAVF)
windows
Ubuntu
python3.8
pycharm2021.2
实现UDP通信模型 (https://jq.qq.com/?_wv=1027&k=QgGWqAVF)
socket的基本使用 (https://jq.qq.com/?_wv=1027&k=QgGWqAVF)
python学习交流群:660193417###
import socket
def main():
# 2. 创建一个套接字对象
'''
udp需要借助网络 ip协议
分为两种
ipv4 ipv6
pc电脑采取的是ipv4 ipv6一般是移动端使用 手机
网络模型类型
udp
:return:
'''
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 3. 发送数据到ubuntu系统中
'''
知道发送到哪个地方
电脑ip地址
接收软件的运行的端口 负责消息接收/发送
'''
udp_socket.sendto(b'hello python', ('192.168.3.40', 8080))
udp_socket.close()
在虚拟机里面,安装一个网络调试助手,192.168.3.40是ip地址,端口为8080
运行代码,接受到数据
发送任意数据 (https://jq.qq.com/?_wv=1027&k=QgGWqAVF)
因为我们想要的是发送中文数据,中文不是字节,是字符串,所以需要继续完善下
python学习交流群:660193417###
def main():
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
send_data = input('请输入任意字符:')
udp_socket.sendto(send_data.encode('utf-8'), ('192.168.3.40', 8080))
udp_socket.close()
运行代码,看看效果 (https://jq.qq.com/?_wv=1027&k=QgGWqAVF)


循环发送数据 (https://jq.qq.com/?_wv=1027&k=QgGWqAVF)
python学习交流群:660193417###
def main():
# 创建套接字
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 循环发送
while True:
send_data = input('请输入你想要发送的数据:')
udp_socket.sendto(send_data.encode('utf-8'), ('192.168.3.40', 8080))
if send_data == "exit":
break
udp_socket.close()


循环接受数据 (https://jq.qq.com/?_wv=1027&k=QgGWqAVF)
python学习交流群:660193417###
def main():
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 绑定本机信息 告诉ubuntu我的当前地址以及端口
localhost_addr = ('', 6666)
udp_socket.bind(localhost_addr)
# 循环接收
while True:
recv_data = udp_socket.recvfrom(1024)
# 元组解包
recv_msg, recv_addr = recv_data
print(recv_msg.decode('utf-8'), recv_addr)


最后一步,完成一个聊天器 (https://jq.qq.com/?_wv=1027&k=QgGWqAVF)
python学习交流群:660193417###
# 发送消息
def send_msg(udp_socket):
msg = input('请输入你想要发送的消息:')
udp_socket.sendto(msg.encode('utf-8'), ('192.168.3.40', 8080))
# 接收消息
def recv_msg(udp_socket):
# 接收
msg = udp_socket.recvfrom(1024)
# 解码
recv_msg = msg[0].decode('utf-8')
print(recv_msg)
def main():
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
udp_socket.bind(('', 6666))
# 发送 / 接收 功能
while True:
op_num = input('请输入要操作的功能序号 [1.发送消息 2.接收消息]:' )
# 根据用户输入的数字去调用相关的功能
if op_num == "1":
send_msg(udp_socket)
elif op_num == "2":
recv_msg(udp_socket)
else:
print('输入有误, 请重新输入...'
来!试试看!
一个紧张刺激的聊天器,要不要进来看看(Python UDP网络模型)的更多相关文章
- C# Socket编程实现简单的局域网聊天器
目录 前言 编码 服务端监听接口 客户端连接接口 文字发送接口 文件发送接口 信息接收接口(文字与文件) 使用 注意事项 源码 前言 最近在学习C# Socket相关的知识,学习之余,动手做了一个简单 ...
- 最近闲着利用QQ协议写了一个聊天器
最近闲着,把以前一个利用QQ协议写了的聊天器找出来玩,采用的是QQ比较稳定的协议,之前听说有人用WEB协议,或是安卓版QQ协议,都不太稳定.而我这个版的已经有好几年没动了.今天找出来依旧能登陆.获取好 ...
- python网络聊天器多线程版
在之前的一篇文章(python网络编程-udp)中实现了一个简单的udp聊天器,只能在单线程下进行收发数据,在学习完多线程之后,实现一个能同时收发数据的udp聊天器. 说明: 编写一个有2个线程的程序 ...
- python使用udp实现聊天器
聊天器简易版 使用udp实现一个简单的聊天器程序,要求如下: 在一个电脑中编写1个程序,有2个功能 1.获取键盘数据,并将其发送给对方 2.接收数据并显示 并且功能数据进行选择以上的2个功能调用 例子 ...
- Netty聊天器(实战一):从0开始实战100w级流量应用
Java 聊天程序(百万级流量实战一):系统介绍 疯狂创客圈 Java 分布式聊天室[ 亿级流量]实战系列之14 [博客园 总入口 ] 源码IDEA工程获取链接:Java 聊天室 实战 源码 写在前面 ...
- java socket通信:聊天器(1)
目的:实现多个客户之间的通信 首先,这个聊天器的框架是这样的: 对于服务器端:建立socket,连接到服务器,并且开始监听. import java.io.*; import java.util.Ar ...
- 使用Servlet和JSP实现一个简单的Web聊天室系统
1 问题描述 利用Java EE相关技术实现一个简单的Web聊天室系统,具体要求如下. (1)编写一个登录 ...
- 使用lua实现一个简单的事件派发器
设计一个简单的事件派发器,个人觉得最重要的一点就是如何保证事件派发过程中,添加或删除同类事件,不影响事件迭代顺序和结果,只要解决这一点,其它都好办. 为了使用pairs遍历函数,重写了pairs(lu ...
- 使用CLRMD编写一个自己的C#调试器
博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:使用CLRMD编写一个自己的C#调试器.
随机推荐
- 几个i的幂的累加公式1^2+2^2+3^2 2~5
1^2+2^2+3^2+--+n^2=n(n+1)(2n+1)/6 1^3+2^3+3^3+...+n^3=(1+2+3+...+n)^2 =[n(n+1)/2]^2 1^4+2^4+3^4+--+n ...
- 计算属性、侦听属性、局部与全局组件使用、组件通信(父子互传)、ref属性、动态组件和keep-alive、插槽
今日内容概要 计算属性 侦听属性 局部组件和全局组件 组件通信之父传子 组件通信之子传父 ref属性(组件间通信) 动态组件和keep-alive 插槽 内容详细 1.计算属性 # 插值的普通函数,只 ...
- Spring 源码 (2)Spring IOC 容器 前戏准备工作
Spring 最重要的方法refresh方法 根据上一篇文章 https://www.cnblogs.com/redwinter/p/16141285.html Spring Bean IOC 的创建 ...
- python基础练习题(题目 字母识词)
day22 --------------------------------------------------------------- 实例031:字母识词 题目 请输入星期几的第一个字母来判断一 ...
- windows 安装 kalfka 并快速启动
1.安装Java 环境 https://www.java.com/zh_CN/ 直接下载安装即可 (如果之前有配置过java环境 可以先跳过此步骤,但是如果运行的时候报错就需要把之前的jdk环境变量删 ...
- ucore lab8 文件系统 学习笔记
最后一战果然过瘾.代码量够多,新机制够复杂度,都管饱.做这一课就像从高山上往下走,坡急且路险,还不知自己的方位,琢磨不透系统的架构.待到下了山,回头一看豁然开朗,原来方才自己所下的山是这般模样.在这里 ...
- [笔记] prufer 序列
什么是 prufer 序列 是可以和 \(n\) 个有标号节点的无根树一一对应的长度为 \(n-2\) 的序列. 一般来说是用于和树相关的组合计数问题,但是可能会出现一些变形,所以除了要了解一些性质, ...
- 关键字 global和nonlocal
globale 表示从全局把一个变量(比如a)引入局部,后面的变量全是此变量a 使用 globale 变量名 # 全局变量一般是不能随意的修改的 # a = 10 # def func(): # ...
- 使用python脚本+zabbix前端监控云联网底层TCP数据流所负载的链路质量,并在丢包时联动保存MTR记录
背景 目前国内各家云联网跨区域数据传输,会将数据流通过哈希运算负载到不同的底层链路上,而底层链路质量差异较大,这种情况导致的现象就是,使用传统的icmp监控线路正常,但是业务一直不稳定,所以才有了使用 ...
- ubuntu helpers
linux 命令大全 Apt proxy configuration on Ubuntu 20.04 Focal Fossa Linux 临时使用socks代理apt-get的方法 docker - ...