zoukankan      html  css  js  c++  java
  • python网络编程(二)

    UDP介绍

    UDP --- 用户数据报协议,是一个无连接的简单的面向数据报的运输层协议。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快。

    UDP是一种面向无连接的协议,每个数据报都是一个独立的信息,包括完整的源地址或目的地址,它在网络上以任何可能的路径传往目的地,因此能否到达目的地,到达目的地的时间以及内容的正确性都是不能被保证的。

    UDP特点:

    UDP是面向无连接的通讯协议,UDP数据包括目的端口号和源端口号信息,由于通讯不需要连接,所以可以实现广播发送。 UDP传输数据时有大小限制,每个被传输的数据报必须限定在64KB之内。 UDP是一个不可靠的协议,发送方所发送的数据报并不一定以相同的次序到达接收方。

    【适用情况】

    UDP是面向消息的协议,通信时不需要建立连接,数据的传输自然是不可靠的,UDP一般用于多点通信和实时的数据业务,比如

    • 语音广播
    • 视频
    • QQ
    • TFTP(简单文件传送)
    • SNMP(简单网络管理协议)
    • RIP(路由信息协议,如报告股票市场,航空信息)
    • DNS(域名解释)

    注重速度流畅

    UDP操作简单,而且仅需要较少的监护,因此通常用于局域网高可靠性的分散系统中client/server应用程序。例如视频会议系统,并不要求音频视频数据绝对的正确,只要保证连贯性就可以了,这种情况下显然使用UDP会更合理一些。

    udp网络程序-发送数据

    创建一个udp客户端程序的流程是简单,具体步骤如下:

    1. 创建客户端套接字
    2. 发送/接收数据
    3. 关闭套接字

    #coding=utf-8
    
    from socket import *
    
    #1. 创建套接字
    udpSocket = socket(AF_INET, SOCK_DGRAM)
    
    #2. 准备接收方的地址
    sendAddr = ('192.168.1.103', 8080)
    
    #3. 从键盘获取数据
    sendData = raw_input("请输入要发送的数据:")
    
    #4. 发送数据到指定的电脑上
    udpSocket.sendto(sendData, sendAddr)
    
    #5. 关闭套接字
    udpSocket.close()
    运行现象:

    udp网络程序-发送、接收数据

    1. 创建udp网络程序-接收数据

    #coding=utf-8
    
    from socket import *
    
    #1. 创建套接字
    udpSocket = socket(AF_INET, SOCK_DGRAM)
    
    #2. 准备接收方的地址
    sendAddr = ('192.168.1.103', 8080)
    
    #3. 从键盘获取数据
    sendData = raw_input("请输入要发送的数据:")
    
    #4. 发送数据到指定的电脑上
    udpSocket.sendto(sendData, sendAddr)
    
    #5. 等待接收对方发送的数据
    recvData = udpSocket.recvfrom(1024) # 1024表示本次接收的最大字节数
    
    #6. 显示对方发送的数据
    print(recvData)
    
    #7. 关闭套接字
    udpSocket.close()

    udp网络程序-端口问题

    会变的端口号

    重新运行多次脚本,然后在“网络调试助手”中,看到的现象如下:

    • 每重新运行一次网络程序,上图中红圈中的数字,不一样的原因在于,这个数字标识这个网络程序,当重新运行时,如果没有确定到底用哪个,系统默认会随机分配
    • 记住一点:这个网络程序在运行的过程中,这个就唯一标识这个程序,所以如果其他电脑上的网络程序如果想要向此程序发送数据,那么就需要向这个数字(即端口)标识的程序发送即可

    udp绑定信息

    #coding=utf-8
    
    from socket import *
    
    #1. 创建套接字
    udpSocket = socket(AF_INET, SOCK_DGRAM)
    
    #2. 绑定本地的相关信息,如果一个网络程序不绑定,则系统会随机分配
    bindAddr = ('', 7788) # ip地址和端口号,ip一般不用写,表示本机的任何一个ip
    udpSocket.bind(bindAddr)
    
    #3. 等待接收对方发送的数据
    recvData = udpSocket.recvfrom(1024) # 1024表示本次接收的最大字节数
    
    #4. 显示接收到的数据
    print recvData
    
    #5. 关闭套接字
    udpSocket.close()

    总结

    • 一个udp网络程序,可以不绑定,此时操作系统会随机进行分配一个端口,如果重新运行次程序端口可能会发生变化
    • 一个udp网络程序,也可以绑定信息(ip地址,端口号),如果绑定成功,那么操作系统用这个端口号来进行区别收到的网络数据是否是此进程的
     
  • 相关阅读:
    多线程创建方式及线程安全问题
    JDBC连接池&DBUtils
    mySQL 多表查询语句
    git 本机链接多库配置
    mysql类似递归的一种操作进行层级查询
    js 自定义事件观察者模式(发布/订阅)
    CSS样式遇见的问题总结记录
    maven打包pom.xml备忘
    JasperReports实现报表调出excel
    ActiveMQ 集群配置 高可用
  • 原文地址:https://www.cnblogs.com/leecoffee/p/9034604.html
Copyright © 2011-2022 走看看