先来哔哔两句:(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. 小程序 text标签内的文字竖着排列

    html:   <view><text>活动规则</text></view>   css: view {   height: 135rpx;   wid ...

  2. brup去除mozilla等无用数据包的方法

    方法一 针对火狐浏览器的解决方法 1.在firefox(火狐浏览器)地址栏中输入: about:config 2.然后出现搜索框,搜索以下内容,双击将它设置成false. network.captiv ...

  3. python中一些元组知识

    元组 Python 的元组与列表类似,不同之处在于元组的元素不能修改. 元组使用小括号 ( ),列表使用方括号 [ ]. 元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可. 实例(Pytho ...

  4. Gson解析:java.lang.IllegalArgumentException: declares multiple JSON fields named status 问题的解决

    在一次写定义系统统一返回值的情况下,碰到了java.lang.IllegalArgumentException: declares multiple JSON fields named status这 ...

  5. 2022最新IntellJ IDEA的zheng开发部署文档

    目录 前景提示 一.环境整合 构建工具(参考工具部署方式) 二.git 导入编译器 三.模块描述浅析 四.配置文档 1.总配置 2.数据库配置 3.密码设置 4.配置建议 五.在IDEA中执行MySQ ...

  6. nacos 详细介绍(一)

    一.Nacos介绍 Nacos是SpringCloudAlibaba架构中最重要的组件. Nacos 是一个更易于帮助构建云原生应用的动态服务发现.配置和服务管理平台,提供注册中心.配置中心和动态 D ...

  7. 在jupyterlab中实现实时协同功能

    1 简介 当你在使用jupyter时,有没有想象过如果我们可以把正在编写代码的jupyter界面共享给其他人,使得别人可以在其他地方实时看到与你同步的jupyter界面,这样一来无论是与他人沟通代码逻 ...

  8. 微信小程序绑定函数如何携带参数

    一开始以为微信小程序的语法是和VUE的语法一样的,直接@click="click(field)",结果却不是这样的 在微信小程序中我们需要设置一个 data-set ,然后在绑定的 ...

  9. Linux-交互式转化批处理工具expect

    expect 是由Don Libes基于 Tcl( Tool Command Language )语言开发的,主要应用于自动化交互式 操作的场景,借助 expect 处理交互的命令,可以将交互过程如: ...

  10. [题解] 51 nod 1340 地铁环线

    不难看出这是一道差分约束的题目. 但是如果想按照通常的题目那样去建边的话,就会发现这句话--相邻两站的距离至少是1公里--建边后就直接让整个题出现了负环(默认是按求最短路建边),没法做了. 这时我们就 ...