• 【python】UDP协议编程


    UDP适用于对效率要求相对较高而对准确性要求相对较低的场合,例如视频在线点播、网络语音通话等等。 socket模块中经常用于UDP编程的方法主要有:

    socket([family[,type[,proto]]]):创建一个socket对象,其中family为socket.AF_INET表示IPV4,socket.AF_INET6表示IPV6;type为SOCK_STREAM表示TCP协议,SOCK_DGRAM表示UDP协议。

    sendto(string,address):把string指定的字节串内容发送给address指定的地址,address是一个元组,格式为(IP地址,端口号)

    recvfrom(bufsize[,flags]):接收数据

    例9-1    编写UDP通信程序,发送端发送一个字符串“Hello world!”。接收端在计算机的5000端口进行接收,并显示接收内容,如果收到字符串bye(忽略大小写)则结束监听。

    接收端代码receiver.py:

     1 import socket
     2 # 使用IPV4协议,使用UDP协议传输数据
     3 s=socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
     4 # 绑定端口和端口号,空字符串表示本机任何可用IP地址
     5 s.bind(('', 5000))
     6 while True:
     7     data, addr = s.recvfrom(1024)
     8     # 显示接收到的内容
     9     data = data.decode()
    10     print('received message:{0} from PORT {1[1]} on {1[0]}'.format(data, addr))
    11     if data.lower() == 'bye':
    12         break
    13 s.close( )

    发送端代码sender.py:

    import socket
    import sys
    s=socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    # 假设192.168.0.103是接收端机器的IP地址
    s.sendto(sys.argv[1].encode() , ("192.168.1.105" ,5000))
    s.close()

    ***首先启动一个命令提示符环境并运行接收端程序,这时接收端程序处于阻塞状态,接下来再启动一个新的命令提示符环境并运行发送端程序,此时会看到接收端程序继续运行并显示接收到的内容以及发送端程序所在计算机IP地址和占用的端口号。

    ***当发送端发送字符串bye后,接收端程序结束,此后再次运行发送端程序时接收端没有任何反应,但发送端程序也并不报错。这正是UDP协议的特点,即“尽最大努力传输”,并不保证非常好的服务质量。

    运行效果:

  • 相关阅读:
    golang 简易聊天
    golang 自定义封包协议(转的)
    PHP 7 测试用例(转)
    android 百度地图开发
    Android studio 签名使用转
    百度ueditor 拖文件或world 里面复制粘贴图片到编辑中 上传到第三方问题
    Android控件属性大全(转)
    Android studio 一个项目中添加两个module遇到的bug
    win7 64位DCOM配置(关于导出excel 配置计算机组件服务)(转)
    Python学习--07迭代器、生成器
  • 原文地址:https://www.cnblogs.com/litchi666/p/12875293.html
Copyright © 2020-2023  润新知