先来哔哔两句:(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网络模型)的更多相关文章

  1. C# Socket编程实现简单的局域网聊天器

    目录 前言 编码 服务端监听接口 客户端连接接口 文字发送接口 文件发送接口 信息接收接口(文字与文件) 使用 注意事项 源码 前言 最近在学习C# Socket相关的知识,学习之余,动手做了一个简单 ...

  2. 最近闲着利用QQ协议写了一个聊天器

    最近闲着,把以前一个利用QQ协议写了的聊天器找出来玩,采用的是QQ比较稳定的协议,之前听说有人用WEB协议,或是安卓版QQ协议,都不太稳定.而我这个版的已经有好几年没动了.今天找出来依旧能登陆.获取好 ...

  3. python网络聊天器多线程版

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

  4. python使用udp实现聊天器

    聊天器简易版 使用udp实现一个简单的聊天器程序,要求如下: 在一个电脑中编写1个程序,有2个功能 1.获取键盘数据,并将其发送给对方 2.接收数据并显示 并且功能数据进行选择以上的2个功能调用 例子 ...

  5. Netty聊天器(实战一):从0开始实战100w级流量应用

    Java 聊天程序(百万级流量实战一):系统介绍 疯狂创客圈 Java 分布式聊天室[ 亿级流量]实战系列之14 [博客园 总入口 ] 源码IDEA工程获取链接:Java 聊天室 实战 源码 写在前面 ...

  6. java socket通信:聊天器(1)

    目的:实现多个客户之间的通信 首先,这个聊天器的框架是这样的: 对于服务器端:建立socket,连接到服务器,并且开始监听. import java.io.*; import java.util.Ar ...

  7. 使用Servlet和JSP实现一个简单的Web聊天室系统

    1 问题描述                                                利用Java EE相关技术实现一个简单的Web聊天室系统,具体要求如下. (1)编写一个登录 ...

  8. 使用lua实现一个简单的事件派发器

    设计一个简单的事件派发器,个人觉得最重要的一点就是如何保证事件派发过程中,添加或删除同类事件,不影响事件迭代顺序和结果,只要解决这一点,其它都好办. 为了使用pairs遍历函数,重写了pairs(lu ...

  9. 使用CLRMD编写一个自己的C#调试器

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:使用CLRMD编写一个自己的C#调试器.

随机推荐

  1. 2021.08.05 P2168 荷马史诗(哈夫曼树模板)

    2021.08.05 P2168 荷马史诗(哈夫曼树模板) [P2168 NOI2015] 荷马史诗 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 重点: 1.k叉哈夫曼树如果子结 ...

  2. GeoServer style中文乱码解决方法

    在说明这个问题之前,有三点需要明确: 一是创建New style时,网页中文本框内的内容才是最终会应用到GeoServer的sld内容,这与本地sld文件没有关系. 二是xml的encoding定义的 ...

  3. 《手把手教你》系列基础篇(九十四)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-下篇(详解教程)

    1.简介 上一篇宏哥用PageFactory实现了POM,宏哥再介绍一下如果不用PageFactory如何实现POM. 2.项目实战 在这里宏哥以百度首页登录的例子,如果用POM实现,在测试脚本中实际 ...

  4. VUE 日期组件(包括年选择)

    封装vant 日期组件实现可以选择年份 <template> <div class="yearMonMain"> <div class="l ...

  5. python学习-Day17

    目录 今日内容详细 生成器对象(自定义迭代器) 小总结 自定义range方法 通过生成器模拟range方法 先以两个参数的range方法为例 针对一个参数情况 针对三个参数情况 自定义的range方法 ...

  6. javaScript深拷贝和浅拷贝简单梳理

    在了解深拷贝和浅拷贝之前,我们先梳理一下: JavaScript中,分为基本数据类型(原始值)和复杂类型(对象),同时它们各自的数据类型细分下又有好几种数据类型 基本数据类型 数字Number 字符串 ...

  7. Go语言学习——map

    map 映射关系容器 内部使用散列表(hash)实现 map是引用类型 必须初始化才能使用 无序的基于key-value的数据结构 map定义 map的定义语法: map[KeyType]ValueT ...

  8. k8s和Docker关系简单说明

    关注「开源Linux」,选择"设为星标" 回复「学习」,有我为您特别筛选的学习资料~ 这篇文章主要介绍了k8s和Docker关系简单说明,本文利用图文讲解的很透彻,有需要的同学可以 ...

  9. C Primer Plus 学习笔记 -- 前六章

    记录自己学习C Primer Plus的学习笔记 第一章 C语言高效在于C语言通常是汇编语言才具有的微调控能力设计的一系列内部指令 C不是面向对象编程 编译器把源代码转化成中间代码,链接器把中间代码和 ...

  10. 98. 验证二叉搜索树 前序遍历解法以及后续遍历解法(go语言)

    leetcode题目 98. 验证二叉搜索树 前序遍历 最简洁的答案版本,由于先判断的是根节点,所以直接判断当前root的值v,是否满足大于左子树最大,小于右子树最小,然后再遍历左子树,右子树是否是这 ...