视频加载失败

基于 UDP 协议的简单套接字

595 字
3 分钟
基于 UDP 协议的简单套接字

基于UDP协议的简单套接字#

UDP协议 -----> 数据报协议

【一】简单版1.0#

【1】TCP协议所遇到的空数据问题是否存在?#

TCP协议是水流式协议:传入的数据不能为空,因为水是一直流的,在传输过程中不会对数据进行操作

UDP协议是数据报协议:传入的数据可为空,在传输过程中UDP会对数据进行内部的拼接和处理

  • 客户端
# -*-coding: Utf-8 -*-
# @File : 客户端 .py
# author: Chimengmeng
# blog_url : https://www.cnblogs.com/dream-ze/
# Time:2023/6/22
import socket
# 建立socket对象
server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
while True:
# 向服务端发送消息
msg = input('msg:>>>>').strip()
server.sendto(f'{msg}'.encode('utf8'), ('127.0.0.1', 8082))
# 接受服务器返回的消息
data_msg, server_addr = server.recvfrom(1024)
msg_data = data_msg.decode("utf8")
IP = server_addr[0]
PORT = server_addr[1]
print(f'服务端返回拿到的消息:>>>>{data_msg}')
print(f'服务端返回拿到的IP:>>>>{IP}')
print(f'服务端返回拿到的端口:>>>>{PORT}')
# 关闭链接
server.close()
  • 服务端
# -*-coding: Utf-8 -*-
# @File : 服务端 .py
# author: Chimengmeng
# blog_url : https://www.cnblogs.com/dream-ze/
# Time:2023/6/22
import socket
# 数据报协议 ------> UDP 协议
server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 建立链接 ip + 端口
server.bind(('127.0.0.1', 8082))
# 接收到服务端传进来的消息
# 接受收到的 ip 和 端口 对于UDP 来说是非常重要的 因为UDP协议没有建立链接操作
# 返回信息就需要用到拿到的ip和端口
msg_data, clint_addr = server.recvfrom(1024)
msg_data = msg_data.decode("utf8")
IP = clint_addr[0]
PORT = clint_addr[1]
print(f'客户端提供的拿到的消息:>>>>{msg_data}')
print(f'客户端提供的拿到的IP:>>>>{IP}')
print(f'客户端提供的拿到的端口:>>>>{PORT}')
while True:
# 建立链接,返回消息内容
return_msg = msg_data.upper().encode('utf-8')
server.sendto(return_msg, clint_addr)
# 关闭服务
server.close()

【2】TCP协议所遇到的客户端断开链接是否会影响到服务端?#

TCP协议是水流式协议:在建立链接过程中,服务端和客户端的链接是一直存在的,断开一方都会对另一方造成影响

UDP协议是数据报协议:在建立链接过程中,是通过解析对方数据中的ip和端口,再向另一方返回数据的,所以一方发生问题并不会影响到另一方

【二】应用#

【1】聊天室的创建#

  • 客户端输入消息
    • 将数据上传到服务器
  • 服务器解析收到的数据,根据接收到的数据进行返回数据

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!

打赏
基于 UDP 协议的简单套接字
https://firefly.cuteleaf.cn/posts/framework/network/110基于udp协议的简单套接字/
作者
Dream
发布于
2023-06-03
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
Dream
Hello, I'm Dream.
公告
欢迎来到我的博客!爱学习爱进步。
分类
标签
最新动态
站点统计
文章
300
分类
5
标签
26
总字数
640,882
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
Vercel
博客版本
Firefly v6.16.8
文章许可
CC BY-NC-SA 4.0
文章目录