Learning-Python【30】:基于UDP协议通信的套接字
UDP协议没有粘包问题,但是缓冲区大小要足够装数据包大小,建议不要超过 512
服务端:
# 服务端
import socket server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 数据报协议-》udp
server.bind(('127.0.0.1', 8080)) # OSError: 一个在数据报套接字上发送的消息大于内部消息缓冲区或其他一些网络限制,或该用户用于接收数据报的缓冲区比数据报小。
data, client_addr = server.recvfrom(1) # b'hello' ==> b'h'
print('第一次:', client_addr, data) data, client_addr = server.recvfrom(1024) # b'world' ==> b'world'
print('第二次:', client_addr, data) # data, client_addr = server.recvfrom(1024)
# print('第三次: ', client_addr, data) server.close()
客户端:
# 客户端
import socket client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 数据报协议 ==> UDP协议 client.sendto('hello'.encode('utf-8'), ('127.0.0.1', 8080))
client.sendto('world'.encode('utf-8'), ('127.0.0.1', 8080))
# client.sendto(''.encode('utf-8'), ('127.0.0.1',8080)) client.close()
基于UDP协议通信的套接字
服务器:
1)创建套接字描述符(socket)
2)设置服务器的 IP 地址和端口号(需要转换为网络字节序的格式)
3)将套接字描述符绑定到服务器地址(bind)
4)从套接字描述符读取来自客户端的请求并取得客户端的地址(recvfrom)
5)向套接字描述符写入应答并发送给客户端(sendto)
6)回到第 4 步等待读取下一个来自客户端的请求
客户端:
1)创建套接字描述符(socket)
2)设置服务器的 IP 地址和端口号(需要转换为网络字节序的格式)
3)向套接字描述符写入请求并发送给服务器(sendto)
4)从套接字描述符读取来自服务器的应答(recvfrom)
5)关闭套接字描述符(close)
服务端:
# 服务端
import socket server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) server.bind(("127.0.0.1", 8080)) while True:
data,client_addr = server.recvfrom(1024)
print(data.decode("utf-8"))
server.sendto(data.upper(), client_addr) server.close()
客户端:
# 客户端
import socket client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) while True:
msg = input("请发送: ").strip()
client.sendto(msg.encode("utf-8"), ("127.0.0.1", 8080))
data, server_addr = client.recvfrom(1024)
print(data.decode("utf-8"))
对于 UDP 协议,客户端发送空没有问题,因为 UDP 协议又叫数据报协议,自带报头,在发送空的时候自动将报头信息发送过去,所以服务端也能接收数据。同时 UDP 协议可以同时处理多个客户端,是因为 CPU 的处理速度快,给人感觉像是在同时处理
Learning-Python【30】:基于UDP协议通信的套接字的更多相关文章
- Learning-Python【28】:基于TCP协议通信的套接字
什么是 Socket Socket 是应用层与 TCP/IP 协议通信的中间软件抽象层,它是一组接口.在设计模式中,Socket 其实就是一个门面模式,它把复杂的 TCP/IP 协议族隐藏在 Sock ...
- 基于UDP协议的socket套接字编程
目录 一.UDP套接字简单示例 1.1 服务端 二.客户端 三.UPD套接字无粘包问题 3.1 服务端 3.2 客户端 四.qq聊天 4.1 服务端 4.2 客户端1 4.3 客户端2 4.4 运行结 ...
- 网络编程——TCP协议、UDP协议、socket套接字、粘包问题以及解决方法
网络编程--TCP协议.UDP协议.socket套接字.粘包问题以及解决方法 TCP协议(流式协议) 当应用程序想通过TCP协议实现远程通信时,彼此之间必须先建立双向通信通道,基于该双向通道实现数 ...
- 基于TCP协议的socket套接字编程
目录 一.什么是Scoket 二.套接字发展史及分类 2.1 基于文件类型的套接字家族 2.2 基于网络类型的套接字家族 三.套接字工作流程 3.1 服务端套接字函数 3.2 客户端套接字函数 3.3 ...
- python 30 基于TCP协议的socket通信
目录 1. 单对单循环通信 2. 循环连接通信:可连接多个客户端 3. 执行远程命令 4. 粘包现象 4.1 socket缓冲区 4.2 出现粘包的情况: 4.3 解决粘包现象 bytes 1. 单对 ...
- python-基于UDP通信的套接字,socketserver模块的使用
一.基于UDP协议通信的套接字 udp是没有链接的,所以先启动哪一端都不会报错 import socket server=socket.socket(socket.AF_INET,socket.SOC ...
- Python中的端口协议之基于UDP协议的通信传输
UDP协议: 1.python中基于udp协议的客户端与服务端通信简单过程实现 2.udp协议的一些特点(与tcp协议的比较) 3.利用socketserver模块实现udp传输协议的并 ...
- 网络编程[第二篇]基于udp协议的套接字编程
udp协议下的套接字编程 一.udp是无链接的 不可靠的 而上篇的tcp协议是可靠的,会有反馈信息来确认信息交换的完成与否 基于udp协议写成的服务端与客户端,各司其职,不管对方是否接收到信息, ...
- python 之 网络编程(基于UDP协议的套接字通信)
8.5 基于UDP协议的套接字通信 UDP协议:数据报协议 特点:无连接,一发对应一收,先启动哪一端都不会报错 优点:发送效率高,但有效传输的数据量最多为500bytes 缺点:不可靠:发送数据,无需 ...
随机推荐
- export及export default的区别
在JavaScript ES6中,export与export default均可用于导出常量.函数.文件.模块等,你可以在其它文件或模块中通过import+(常量 | 函数 | 文件 | 模块)名的方 ...
- php数组合并方法array_merge + 排序array_multisort方法 array_unique数组去重 array_values数组索引值重新从0开始递增
$dingdan = array_merge($jie_dingdan,$user_dingdan);//数组合并方法 $orderFile = array(); foreach($dingdan a ...
- js中级小知识
1.作用域链 作用域:浏览器给js的一个生存环境(栈内存). 作用域链:js中的关键字var和function都可以提前声明和定义,提前声明和定义的放在我们的内存地址(堆内存)中.然后js从上到下逐行 ...
- 【Linux内存源码分析】vmalloc不连续内存管理(转)
https://www.jeanleo.com/2018/09/09/%E3%80%90linux%E5%86%85%E5%AD%98%E6%BA%90%E7%A0%81%E5%88%86%E6%9E ...
- Docker数据卷
1.volume操作命名:docker volume Usage: docker volume COMMAND Manage Docker volumes Options: --he ...
- kickstart ---无人值守安装
kickstart 实战 http://man.linuxde.net/download/CentOS_6_9镜像 安装: 关闭防火墙 且在编辑虚拟网络的vnet8中要取消使用本地dhcp项 1.yu ...
- 【数据可视化-Echarts】Echart基础
林峰老师Echart基础课程笔记
- File 文件
1 File 概述 文件:file目录:directory路径:path File类静态成员变量: pathSeparator:与系统有关的路径分隔符,为了方便,它被表示为一个字符串separator ...
- python之wtforms组件
作用 生成 HTML 表单. form 表单验证. 基本使用 安装 pip3 install wtforms 示例 登录 from flask import Flask, render_templat ...
- [py]js前端求和与flask后端求和
index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...