先来哔哔两句:(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('输入有误, 请重新输入...'

来!试试看!

最新文章

  1. 戴尔OMSA 使用指南
  2. React Native 的高度与宽度设置
  3. 转载github上最全的资源教程--前端涉及的所有知识体系
  4. Queue(队列)
  5. 【原创】shadowebdict开发日记:基于linux的简明英汉字典(二)
  6. Scilab 的画图函数(1)
  7. [Angular Tutorial] 2-Angular Templates
  8. Android开发之旅:环境搭建
  9. Xamarin android 的WebClient Json下载并存储本地及sqlite数据库
  10. ECMAScript 6 proxies
  11. lua os.date函数定义和示例
  12. Java学习之代码块(静态,构造代码块,构造方法)执行顺序
  13. UVA11400-Lighting System Design(动态规划基础)
  14. Redis:Sentinel哨兵
  15. SpringMVC+Spring+Mybatis+Maven+mysql整合
  16. Runtime 类的使用
  17. Lucene.Net+盘古分词器(详细介绍)
  18. LeetCode赛题395----Longest Substring with At Least K Repeating Characters
  19. 20155218 《Java程序设计》实验一(Java开发环境的熟悉)实验报告
  20. [How to] HBase的bulkload使用方法

热门文章

  1. 图数据库|基于 Nebula Graph 的 BetweennessCentrality 算法
  2. 2021.11.11 P4052 [JSOI2007]文本生成器(AC自动机+DP)
  3. Vue生产环境调试的方法
  4. 11.Flink实时项目之支付宽表
  5. 面渣逆袭:Spring三十五问,四万字+五十图详解
  6. [AcWing 36] 合并两个排序的链表
  7. QMetaObject::connectSlotsByName: No matching signal for XXX 原理探究
  8. 2003031121——浦娟——Python数据分析第七周作业——MySQL的安装及使用
  9. UDP协议,多道技术,进程,同步与异步,阻塞与非阻塞
  10. 零基础学Java第三节(基本输入输出)