udp协议的套接字

udp协议传输  服务端和客户端没有建立连接一说。

import socket
# 总结一下基础工作流程:服务端生成套接字并绑定ip_port,进入数据传输循环,服务端接受客户端发送的信息和地址,
# 然后服务端对客户端请求做出响应,发送处理好的数据根据而客户端地址。
# 客户端建立套接字,直接进入传输循环,根据服务端的ip_port给服务端发送请求,接收数据返回处理的数据内容和服务端ip_port。
# 客户端 sendto(字节 + 服务端ip_port) ——》服务端 recvfrom(1024)接收客户端数据和ip_port——》服务端处理数据,sendto(处理好的数据,客户端ip_port),
# ——》客户端接受服务端数据和ip_port recvfrom(1024)
server=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) #数据报协议-》udp # 生成基于udp协议的套接字
server.bind(('127.0.0.1',8080)) # 绑定服务端ip_port while True:
data,client_addr=server.recvfrom(1024) # 接受客户端数据内容和客户端ip_port
print('===>',data,client_addr)
server.sendto(data.upper(),client_addr) # 发送返回值给客户端,sendto(数据处理,客户端地址) server.close()

udp传输服务端

import socket

client=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) #数据报协议-》udp  生成基于udp协议的套接字

while True:
msg=input('>>: ').strip() #msg='' # 传过去的是空字符,服务端也会有返回值b‘’,因为基于udp协议是数据包协议传输,有报头。
client.sendto(msg.encode('utf-8'),('127.0.0.1',8080)) # sendto(字节内容+ 服务端地址)
data,server_addr=client.recvfrom(1024) # 接收数据返回处理的数据内容和服务端ip_port
print(data) client.close()

udp传输客户端

udp传输存在粘包问题

import socket
# udp协议不存在粘包问题,只有数据丢失。一般用在数据访问,qq也用的udp。
server=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) # 数据报协议-》udp(SOCK_DGRAM)
server.bind(('127.0.0.1',8080)) # 服务端还是需要绑定ip_port data,client_addr=server.recvfrom(1) # b'hello'==>b'h' 在windows下会直接报错,unix和linux会接受1个字节。
# 这里的recvfrom返回一个元组,分别是数据和客户端ip和端口
print('第一次:',client_addr,data) data,client_addr=server.recvfrom(1024) #b'world' =>b'world' # udp时发送数据包,包含报头和数据内容
# 即使发送空字符,他也会接受报头,而不是还在等待接受。如果数据过大,udp协议传输会直接造成数据丢失,不可靠传输。
# 而不是和tcp传输一样,在不解决粘包的情况下,下一条命令依然接受上一条命令请求的内容。
print('第二次:',client_addr,data)
#
# data,client_addr=server.recvfrom(1024)
# print('第三次:',client_addr,data) server.close()

udp粘包问题服务端

import socket

client=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) #数据报协议-》udp

client.sendto('hello'.encode('utf-8'),('127.0.0.1',8080)) # sendto 后面跟着发送的字节形式内容以及服务端ip_port
client.sendto('world'.encode('utf-8'),('127.0.0.1',8080))
# client.sendto(''.encode('utf-8'),('127.0.0.1',8080)) client.close()

udp粘包问题客户端

udp传输一些总结:

  

服务端
udp协议没有粘包 一次发送只能有一个接收 没有监听,没有accept udp协议时数据包协议 没有发送空一说 每个数据都自带报头 人数多,数据量大都会影响伪并发(udp传输不需要建立连接,发出请求直接在客户端开启一个进程,少数进程看起来像是在并发) udp通常用在查询方面 qq基于udp 稳定传输512字节以内的数据

基于udp协议的套接字及udp协议粘包问题的更多相关文章

  1. 网络编程----socket介绍、基于tcp协议的套接字实现、基于udp协议的套接字实现

    一.客户端/服务器架构(C/S架构)                                                即C/S架构,包括: 1.硬件C/S架构(打印机) 2.软件C/S架 ...

  2. 网络编程之基于UDP协议的套接字编程、基于socketserver实现并发的socket

    目录 基于UDP协议的套接字编程 UDP套接字简单示例 服务端 客户端 基于socketserver实现并发的socket 基于TCP协议 server类 request类 继承关系 服务端 客户端1 ...

  3. python 之 网络编程(基于UDP协议的套接字通信)

    8.5 基于UDP协议的套接字通信 UDP协议:数据报协议 特点:无连接,一发对应一收,先启动哪一端都不会报错 优点:发送效率高,但有效传输的数据量最多为500bytes 缺点:不可靠:发送数据,无需 ...

  4. 基于tcp和udp协议的套接字

    socket:是在应用层和传输层之间的一个抽象层,它把TCP/IP层的复杂的操作封装抽象,并提供一些接口供应用层调用 套接字:被设计用于同一台主机上多个应用程序之间的通信,被称为进程之间通信或IPC ...

  5. 基于UDP协议的套接字编程

    基于udp协议的套接字编程 UDP是无链接的,先启动那一端都不会报错 UDP协议是数据报协议,发空的时候也会自带报头,因此客户端输入空,服务端也能收到 一般不用与传输大数据 虽然没有粘包问题,但是不能 ...

  6. 网络编程(基于udp协议的套接字/socketserver模块/进程简介)

    一.基于UDP协议的套接字 TCP是建立可靠连接,并且通信双方都可以以流的形式发送数据.相对TCP,UDP则是面向无连接的协议. 使用UDP协议时,不需要建立连接,只需要知道对方的IP地址和端口号,就 ...

  7. 网络编程基础:粘包现象、基于UDP协议的套接字

    粘包现象: 如上篇博客中最后的示例,客户端有个 phone.recv(2014) , 当服务端发送给客户端的数据大于1024个字节时, 多于1024的数据就会残留在管道中,下次客户端再给服务端发命令时 ...

  8. 网络编程(四)--基于udp协议的套接字、socketserver模块

    一.UDP协议(数据报协议) 1.何为udp协议 不可靠传输,”报头”部分一共只有8个字节,总长度不超过65,535字节,正好放进一个IP数据包. 以太网头 ip头                  ...

  9. 网络编程[第二篇]基于udp协议的套接字编程

    udp协议下的套接字编程 一.udp是无链接的    不可靠的 而上篇的tcp协议是可靠的,会有反馈信息来确认信息交换的完成与否 基于udp协议写成的服务端与客户端,各司其职,不管对方是否接收到信息, ...

随机推荐

  1. 使用proc接口例子【转】

    本文转载自:http://blog.csdn.net/mike8825/article/details/52434666 版权声明:本文为博主原创文章,未经博主允许不得转载. 在上一篇的使用sys接口 ...

  2. 修改u-boot的开机logo及显示过程【转】

    本文转载自;http://blog.csdn.net/voice_shen/article/details/6789424 [ u-boot: Git://git.denx.de/u-boot.git ...

  3. Oracle中如何用SQL检测字段是否包括中文字符

    用Oracle的编码转换的函数Convert实现,测试后可行. SQL> select *  2    from (select 'abcd' c1 from dual  3          ...

  4. 识别String类型变量的问题

    碰到了android无法识别string的问题 Cursor cursor = db.query(true, "user", new String[]{"id" ...

  5. Watir: 在使用test/unit的时候要注意,不需要require的时候别require

    假设我书写了很多测试用例,测试用例中都有:require 'test/unit' 后来我想把很多这样的测试用例组织在一起运行,我使用了两个require: require 'test/unit' re ...

  6. Python-Django使用MemcachedCache缓存

    最近工作中使用到缓存,简单记录之... 关于django的几种缓存方式,就不在做介绍了,网上一搜一大把:1.8.2官方文档, Django 缓存,Python菜鸟之路:django缓存 学习了之后,选 ...

  7. Harbor安装部署--基于 Docker Distribution 的企业级 Registry 服务

    harbor简介 Harbor 是一个企业级 Registry 服务.它对开源的 Docker Registry 服务进行了扩展,添加了更多企业用户需要的功能.Harbor 被设计用于部署一套组织内部 ...

  8. 一文教您如何通过 Docker 快速搭建各种测试环境(Mysql, Redis, Elasticsearch, MongoDB) | 建议收藏

    欢迎关注个人微信公众号: 小哈学Java, 文末分享阿里 P8 高级架构师吐血总结的 <Java 核心知识整理&面试.pdf>资源链接!! 个人网站: https://www.ex ...

  9. 洛谷 - P1034 - 矩形覆盖 - dfs

    https://www.luogu.org/problemnew/show/P1034 可能是数据太水了瞎搞都可以过. 判断两个平行于坐标轴的矩形相交(含顶点与边相交)的代码一并附上. 记得这里的xy ...

  10. 51nod1014【暴力】

    直接暴力1e6就好了 #include <bits/stdc++.h> using namespace std; typedef long long LL; int main() { LL ...