一个紧张刺激的聊天器,要不要进来看看(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#调试器.
随机推荐
- 小程序 text标签内的文字竖着排列
html: <view><text>活动规则</text></view> css: view { height: 135rpx; wid ...
- brup去除mozilla等无用数据包的方法
方法一 针对火狐浏览器的解决方法 1.在firefox(火狐浏览器)地址栏中输入: about:config 2.然后出现搜索框,搜索以下内容,双击将它设置成false. network.captiv ...
- python中一些元组知识
元组 Python 的元组与列表类似,不同之处在于元组的元素不能修改. 元组使用小括号 ( ),列表使用方括号 [ ]. 元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可. 实例(Pytho ...
- Gson解析:java.lang.IllegalArgumentException: declares multiple JSON fields named status 问题的解决
在一次写定义系统统一返回值的情况下,碰到了java.lang.IllegalArgumentException: declares multiple JSON fields named status这 ...
- 2022最新IntellJ IDEA的zheng开发部署文档
目录 前景提示 一.环境整合 构建工具(参考工具部署方式) 二.git 导入编译器 三.模块描述浅析 四.配置文档 1.总配置 2.数据库配置 3.密码设置 4.配置建议 五.在IDEA中执行MySQ ...
- nacos 详细介绍(一)
一.Nacos介绍 Nacos是SpringCloudAlibaba架构中最重要的组件. Nacos 是一个更易于帮助构建云原生应用的动态服务发现.配置和服务管理平台,提供注册中心.配置中心和动态 D ...
- 在jupyterlab中实现实时协同功能
1 简介 当你在使用jupyter时,有没有想象过如果我们可以把正在编写代码的jupyter界面共享给其他人,使得别人可以在其他地方实时看到与你同步的jupyter界面,这样一来无论是与他人沟通代码逻 ...
- 微信小程序绑定函数如何携带参数
一开始以为微信小程序的语法是和VUE的语法一样的,直接@click="click(field)",结果却不是这样的 在微信小程序中我们需要设置一个 data-set ,然后在绑定的 ...
- Linux-交互式转化批处理工具expect
expect 是由Don Libes基于 Tcl( Tool Command Language )语言开发的,主要应用于自动化交互式 操作的场景,借助 expect 处理交互的命令,可以将交互过程如: ...
- [题解] 51 nod 1340 地铁环线
不难看出这是一道差分约束的题目. 但是如果想按照通常的题目那样去建边的话,就会发现这句话--相邻两站的距离至少是1公里--建边后就直接让整个题出现了负环(默认是按求最短路建边),没法做了. 这时我们就 ...