udp协议的套接字

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

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

udp传输服务端

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

udp传输客户端

udp传输存在粘包问题

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

udp粘包问题服务端

  1. import socket
  2.  
  3. client=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) #数据报协议-》udp
  4.  
  5. client.sendto('hello'.encode('utf-8'),('127.0.0.1',8080)) # sendto 后面跟着发送的字节形式内容以及服务端ip_port
  6. client.sendto('world'.encode('utf-8'),('127.0.0.1',8080))
  7. # client.sendto(''.encode('utf-8'),('127.0.0.1',8080))
  8.  
  9. client.close()

udp粘包问题客户端

udp传输一些总结:

  

  1. 服务端
    udp协议没有粘包
  2.  
  3. 一次发送只能有一个接收
  4.  
  5. 没有监听,没有accept
  6.  
  7. udp协议时数据包协议 没有发送空一说 每个数据都自带报头
  8.  
  9. 人数多,数据量大都会影响伪并发(udp传输不需要建立连接,发出请求直接在客户端开启一个进程,少数进程看起来像是在并发)
  10.  
  11. 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. Hadoop 中的 (side data) 边数据

    一.用途 边数据是作业所需的额外的只读数据,通常用来辅助主数据集: 二.方法 1.利用Configuration类来配置,利用setter()和getter()可方便的使用,方便存储一些基本的类型: ...

  2. Hihocoder #1077 : RMQ问题再临-线段树(线段树:结构体建树+更新叶子往上+查询+巧妙使用father[]+线段树数组要开大4倍 *【模板】)

    #1077 : RMQ问题再临-线段树 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 上回说到:小Hi给小Ho出了这样一道问题:假设整个货架上从左到右摆放了N种商品,并 ...

  3. 基于Python 的简单推荐系统

    def loadExData(): return[[1,1,1,0,0], [2,2,2,0,0], [1,1,1,0,0], [5,5,5,0,0], [1,1,0,2,2], [0,0,0,3,3 ...

  4. 3种方法判断手机浏览器跳转WAP手机网站

    随着移动设备的普及,企业的网络宣传已经不能局限在PC端,而需要同时在移动端有所建树.对于公司网站来说,以前都是做的PC端的,当然手机等移动端也可以访问,但是用户体验肯定不如完全适合的手机端来的方便.我 ...

  5. 网站建设中用JS判断时间并显示不同内容

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. ES6 对象的解构赋值

    对象的解构赋值 解构不仅可以用于数组,还可以用于对象. let {foo,bar} = {foo:"aaa",bar:"bbb"}; console.log(f ...

  7. hadoop部署之防火墙

    在部署hadoop时,好多资料上都写了要关闭防火墙,如果不关闭可能出现节点间无法通信的情况,于是大家也都这样做了,因此集群通信正常.当然集群一般是处于局域网中的,因此关闭防火墙一般也不会存在安全隐患, ...

  8. 15个你不可不知的cmd命令

    cmd和dos: dos是Disk Operating System 磁盘操作系统的缩写,它是个人计算机上的一类操作系统.跟Windows图像界面操作系统不同的是,dos是一种面向磁盘的操作系统,并且 ...

  9. Codefroces #404 Div2

    A题 分析:把多面体和面数一一对应即可 #include<iostream> #include<map> #include<cstring> #include< ...

  10. 【SDOI2009】SuperGCD

    [题目链接] 点击打开链接 [算法] 1.关于求最大公约数的算法 若使用辗转相除法,那么显然会超时 不妨这样思考 : 要求gcd(a,b), 若a为偶数,b为偶数,则gcd(a,b) = 2 * gc ...