• Python UDP 协议网络编程《一》


    今日主题:UDP协议层Python 是如何收发消息的。

    1、基础内容了解

    • TCP & UDP 这两种协议都是传输层的协议,Socket 是传输供给应用层的编程接口,所以Socket 编程就分为TCP & UDP 编程两类。

    • TCP 是面向连接的,传输数据是安全的,稳定的,效率相对较低。SOCK_STREAM表示是TCP的socket。

    • UDP 是面向无连接的,传输数据是不安全的,效率较高。SOCK_DGRAM表示是UDP的socket。

    • UDP协议称为用户数据报协议(user data protocol) , UDP 为应用程序提供了一种无需建立连接就可以发送封装的 IP 数据报的方法 . 因此:传输数据之前源端和终端不建立连接。

    • socket: 套接字是一个模块,我们用它来完成收发信息。

    • ip和端口: 要给谁发送消息就写谁的ip,这里指的是server 端。

    • encode: 就是编码,把字符串转换成字节,因为sendto方法的格式.(反之decode就是解码),本文以utf-8为编码来演示。

    2、UDP 发送消息的实现步骤

    • 导包socket模块

    • 创建socket对象

    • 确定好要发送的目标ip,端口

    • 确定要发送的内容

    • 用socket对象的sendto方法发送

    • 关闭socket对象

    client.py 发送消息端的Python 代码实现:

     1 from socket import socket,AF_INET,SOCK_DGRAM
     2 udp_socket = socket(AF_INET, SOCK_DGRAM)#建议upd连接
     3 local_address = ('127.0.0.1', 8000)#定义了本机的ip and port
     4 udp_socket.bind(local_address)#绑定本机的ip and port
     5
     6 def udp_send_msg():
     7    while 1:#无限接收
     8        resvice_address=('127.0.0.1',9000) #定义了接收消息机器的ip and port
     9        data=input("<<<:")#接收键盘的输出信息
    10        udp_socket.sendto(str(data).encode("utf-8"),resvice_address)#向接收消息机器发送消息
    11    udp_socket.close()
    12
    13 if __name__ == '__main__':
    14     print("the client of ip:%s and port:%d is running"%(local_address))
    15     udp_send_msg()

    运行后结果:
    the client of ip:127.0.0.1 and port:8000 is running
    <<<:hello tony
    <<<:good job
    <<<:

     

    3、UDP接收消息的实现步骤

    • 导包socket文件

    • 创建socket对象

    • 绑定地址和端口

    • 接受数据,等待

    • 关闭socket对象

    server.py 接收消息端的Python 代码实现:

     1 from socket import socket,AF_INET,SOCK_DGRAM
     2 local_address = ('127.0.0.1', 9000)  # 定义本服务器的ip and port
     3 udp_socket = socket(AF_INET, SOCK_DGRAM)#建立udp socker连接
     4
     5 def recv_server():
     6    udp_socket.bind(local_address)#服务端绑定ip and port
     7    recv_data = udp_socket.recvfrom(1024)#收数据等待
     8    print('接收的内容:', recv_data[0].decode('utf-8'))#显示收到的信息
     9    print('发送人的地址:', recv_data[1])#显示收到的信息
    10
    11
    12 if __name__ == '__main__':
    13    print("the server ip:%s and the port:%d is running"%(local_address))
    14    while True:
    15       recv_server()
    16    udp_socket.close()

    运行后结果:
    the server ip:127.0.0.1 and the port:9000 is running
    接收的内容:hello tony
    发送人 的地址:('127.0.0.1', 8000)
    接收的内容:good job
    发送人 的地址:('127.0.0.1', 8000)

    欢迎关注【无量测试之道】公众号,回复【领取资源】,
    Python编程学习资源干货、
    Python+Appium框架APP的UI自动化、
    Python+Selenium框架Web的UI自动化、
    Python+Unittest框架API自动化、

    资源和代码 免费送啦~
    文章下方有公众号二维码,可直接微信扫一扫关注即可。

    备注:我的个人公众号已正式开通,致力于测试技术的分享,包含:大数据测试、功能测试,测试开发,API接口自动化、测试运维、UI自动化测试等,微信搜索公众号:“无量测试之道”,或扫描下方二维码:

     添加关注,让我们一起共同成长!

  • 相关阅读:
    css3 径向渐变
    进度条-线性渐变
    echars 图表提示框自定义显示
    Android Ndef Message解析
    android 应用程序记录AAR
    android的nfc卡模拟开发
    《NFC开发实战详解》笔记
    1、Altium Designer 入门
    Stm32之通用定时器复习
    external与static的用法
  • 原文地址:https://www.cnblogs.com/Wu13241454771/p/13748684.html
Copyright © 2020-2023  润新知