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))
  • 相关阅读:
    Mybatis Generator 生成的mapper只有insert方法
    someone you loved 歌词翻译
    Illegal instant due to time zone offset transition (Asia/Shanghai)_夏令时问题
    React js ReactDOM.render 语句后面不能加分号
    node js 路由
    node -v node is not define
    怎样从gitHub上面拉项目
    工作3年java面试题整理(自用)
    状态模式
    代理模式
  • 原文地址:https://www.cnblogs.com/earon/p/9575578.html
Copyright © 2011-2022 走看看