zoukankan      html  css  js  c++  java
  • python UDP-数据报协议

    基于udp协议通信的套接字

    服务端

     1 from socket import *
     2 
     3 server = socket(AF_INET, SOCK_DGRAM)  # SOCK_DGRAM=>数据报协议
     4 server.bind(('127.0.0.1', 8080))
     5 
     6 print('start....')
     7 while True:
     8     data, client_addr = server.recvfrom(1024)  # (b'hello', ('127.0.0.1', 49318))
     9     server.sendto(data.upper(), client_addr)
    10 
    11 server.close()

    客户端

     1 from socket import *
     2 
     3 client = socket(AF_INET, SOCK_DGRAM)  # SOCK_DGRAM=>数据报协议
     4 
     5 while True:
     6     msg = input('>>: ').strip()
     7     client.sendto(msg.encode('utf-8'), ('127.0.0.1', 8080))
     8     data, server_addr = client.recvfrom(1024)
     9     print(data)
    10 
    11 client.close()

    数据报协议的特点1

    当发送的数据报大于接收数据报的缓冲区大小时:

      在windows系统: 接收端会抛出异常

      在Linux系统: 接收端不会抛出异常, 会丢弃掉多余的数据

    服务端

    1 from socket import *
    2 
    3 server = socket(AF_INET, SOCK_DGRAM)  # SOCK_DGRAM=>数据报协议
    4 server.bind(('127.0.0.1', 8081))
    5 
    6 server.recvfrom(1)

    >>>OSError: [WinError 10040] 一个在数据报套接字上发送的消息大于内部消息缓冲区或其他一些网络限制,或该用户用于接收数据报的缓冲区比数据报小。

    客户端

    1 from socket import *
    2 
    3 client = socket(AF_INET, SOCK_DGRAM)  # SOCK_DGRAM=>数据报协议
    4 
    5 client.sendto(b'hello', ('127.0.0.1', 8081))

    数据报协议的特点2

    UDP协议没有粘包问题

    UD协议能够稳定传输数据的最大数据量为512Bytes

    服务端

     1 from socket import *
     2 
     3 server = socket(AF_INET, SOCK_DGRAM)  # SOCK_DGRAM=>数据报协议
     4 server.bind(('127.0.0.1', 8081))
     5 
     6 data1 = server.recvfrom(1024)
     7 print('第一次接收: ', data1)
     8 data2 = server.recvfrom(1024)
     9 print('第二次接收: ', data2)
    10 data3 = server.recvfrom(1024)
    11 print('第三次接收: ', data3)

    >>>第一次接收: (b'hello', ('127.0.0.1', 55249))
    >>>第二次接收: (b'world', ('127.0.0.1', 55249))
    >>>第三次接收: (b'egon', ('127.0.0.1', 55249))

    客户端

    1 from socket import *
    2 
    3 client = socket(AF_INET, SOCK_DGRAM)  # SOCK_DGRAM=>数据报协议
    4 
    5 client.sendto(b'hello', ('127.0.0.1', 8081))
    6 client.sendto(b'world', ('127.0.0.1', 8081))
    7 client.sendto(b'egon', ('127.0.0.1', 8081))
  • 相关阅读:
    变量
    匿名函数与内建函数
    Datanode denied communication with namenode because hostname cannot be resol
    0003.搭建Hadoop的环境
    0001.大数据课程概述与大数据背景知识
    享学首创年薪阿里60W+/对标P7岗移动 架构师成长路线V3.0 ---- Android移动互联网架构开发
    FFmpeg和WebRTC的区别
    查看每个文件下内存占用大小
    linux 删除中文乱码
    FFmpeg 命令大全
  • 原文地址:https://www.cnblogs.com/earon/p/9575578.html
Copyright © 2011-2022 走看看