zoukankan      html  css  js  c++  java
  • UDP

    创建一个udp的网络程序流程很简单,具体步骤如下:

    1.创建客户端套接字

    2.发送/接收数据

    3.关闭套接字

    
    

     

    客户端(发送端)
    
    import socket
    
    # 1. 创建udp套接字
    udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    
    # 2. 准备接收方的地址
    # '192.168.1.103'表示目的ip地址
    # 8080表示目的端口
    dest_addr = ('192.168.1.103', 11000)  # 注意 是元组,ip是字符串,端口是数
    # 3. 定义发送的数据 send_data = input("请输入要发送的数据:")
    
    
    # 4. 发送数据到指定的电脑上的指定程序中 
    udp_socket.sendto(send_data.encode('gbk'), dest_addr)

    # 5. 关闭套接字
    udp_socket.close()


     


    服务端(接收端)

    #coding=utf-8 import socket # 1. 创建udp套接字 udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 2.绑定ip和端口 udp_socket.bind(('本地ip', 11000)) # 3. 等待接收对方发送的数据 recv_data = udp_socket.recvfrom(1024) # 1024表示本次接收的最大字节数 # 4. 显示对方发送的数据 print(recv_data) # 接收到的数据recv_data是一个元组 # 第1个元素是对方发送的数据 # 第2个元素是对方的ip和端口 print(recv_data[0].decode('gbk')) print(recv_data[1]) # 5. 关闭套接字 udp_socket.close()


    流程

    1、接收方首先会判断接收到的数据目的ip是否是本电脑的ip,如果是则进行处理,否则扔掉。

    2、根据提取数据的目的端口以及使用的协议(udp、tcp),判断电脑中是否有此端口对应的程序,如果有则传递给这个程序,否则扔掉数据。

    3、应用程序接收到数据,然后显示。

    总结

    一个udp网络程序,可以不绑定,此时操作系统会随机进行分配一个端口,如果重新运行此程序,端口可能会发生变化。

    也可以绑定信息(IP地址,端口号),如果绑定成功,那么操作系统用这个端口号来进行区别收到的网络数据是否是给此进程的。

    网络通信过程中之所需要ip、port等,就是为了能够 将一个复杂的通信过程进行任务 拆分为一个一个具体的任务,然后相互配合,从而保证数据准确无误的传递。

     

     
     
    广播
    "一对所有"的通讯模式 。无法针对每个客户的要求和时间及时提供个性化服务。
    由于服务器不用向每个客户机单独发送数据,所以服务器流量负载极低。 
     

    import socket

    # 1. 创建UDP套接字
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

    # 2. 设置UDP套接字允许其广播(注意如果udp套接字需要广播,则一定要添加此语句)
    s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)

    # 选做 绑定本地信息
    # s.bind(("", 8080))

    # 4. 向本局域网中发送广播数据
    # 此时只要是本局域网中的电脑上有 用1060端口的udp程序 它就会收到此数据
    dest_info = ("<broadcast>", 1060) # <broadcast>会自动改为本局域网的广播ip
    s.sendto('hello world !'.encode('utf-8'), dest_info)

    # 5. 关闭套接字
    s.close()

     

    如果需要用到广播,则需要对这个套接字进行设置,方式是很固定的,如下

    套接字.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)

    但是要注意一点:真正用到广播那么就考虑添加这个设置,否则不要添加,因为这样会到这个局域网中会比较拥堵

  • 相关阅读:
    Git在window的使用(TortoiseGit)之一
    redis——学习之路五(简单的C#使用redis)
    Redis——学习之路四(初识主从配置)
    Redis——学习之路三(初识redis config配置)
    Redis——学习之路二(初识redis服务器命令)
    Redis——学习之路一(初识redis)
    博客搬家通知
    JAVA WEB项目中使用并改造editor.md实现Markdown编辑器
    SQLite及ORMlite在WebApp中的使用
    日期选择插件clndr的使用
  • 原文地址:https://www.cnblogs.com/wy919/p/12669033.html
Copyright © 2011-2022 走看看