zoukankan      html  css  js  c++  java
  • 网络编程-python实现-UDP(1.1.2)

    @

    1.UDP是什么

    Internet 协议集支持一个无连接的传输协议,该协议称为用户数据报协议(UDP,User Datagram Protocol)。UDP 为应用程序提供了一种无需建立连接就可以发送封装的 IP 数据报的方法。RFC 768 [1] 描述了 UDP。
    Internet 的传输层有两个主要协议,互为补充。无连接的是 UDP,它除了给应用程序发送数据包功能并允许它们在所需的层次上架构自己的协议之外,几乎没有做什么特别的的事情。面向连接的是 TCP,该协议几乎做了所有的事情

    2.代码实现

    发送端

    import socket
    
    def main():
        #创建一个udp套接字
        udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
        #如果没有绑定,故接收端只有随机端口接收
        udp_socket.bind(("",7789))
        while True:
            #获取数据
            send_data = input("请输入要发送的数据")
    
            if send_data == "exit":
                break
    
            #ip,port
            address  = ("127.0.0.1",7788)
    
            #可以使用套接字收发数据  第一个参数必须为二进制数据 第二个参数是一个元组(ip,port)
            # udp_socket.sendto(b"hahaha",address)
            udp_socket.sendto(send_data.encode("utf-8"),address)
    
    
    
        #关闭
        udp_socket.close()
    
    if __name__ == '__main__':
        #发送服务器启动
        main()
    
    

    接收端

    import socket
    
    
    def main():
        # 创建一个udp套接字
        udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        # 绑定本地的相关信息,如果一个网络程序不绑定,系统会随机分配
        address = ("127.0.0.1", 7788)
        udp_socket.bind(address)
    
    
        for i in range(0,100):
            #等待接收对方发送的数据 1024表示的是每一次接收的最大字节数
            recv_data = udp_socket.recvfrom(1024)
            recv_mess  = recv_data[0]
            send_addre = recv_data[1]
            print(recv_mess.decode("utf-8"),str(send_addre))#recv_mess.decode("utf-8")
        # 关闭
        udp_socket.close()
    
    
    if __name__ == '__main__':
        print("接收服务器启动")
        main()
    

    注意

    • 接收端必须绑定端口和ip地址
    • 发送端可以不绑定,此时主机会分配一个随机的端口
    • 发送端发送的数据要进行编码,对应的接收端要进行解码
    • recvfrom后面接的是字节数
    • recvfrom返回的数据是一个列表挥着元组,其中0为接收的数据,1为发送人的地址
  • 相关阅读:
    U盘引导Linux安装 CentOS .3
    Linux CentOS 6.3 网络连接 修复 虚拟机共享主机网络
    内存中“堆”和“栈”的区别
    求助帖--C++中单引号' '内多个字符是什么意思
    Cent Os6.3 设置中文输入法
    WPF中调用matlab制作的dll进行图像处理
    Python中的round()函数原理
    Eclipse+Pydev环境搭建
    5-4-shell:数组
    5-3-shell:流程控制--判断循环
  • 原文地址:https://www.cnblogs.com/simon-idea/p/11314602.html
Copyright © 2011-2022 走看看