美文网首页
Python 网络编程 - 02 udp网络程序(发送、接收数

Python 网络编程 - 02 udp网络程序(发送、接收数

作者: flowerflower | 来源:发表于2019-03-09 15:24 被阅读0次
    ◉❥◉

    UDP(User Datagram Protocol,用户数据报协议)是一种无连接、不可靠、基于数据报的传输层通信协议。
    UDP 的通信过程与 TCP 相比较为简单,不需要复杂的三次握手与四次挥手,体现了无连接。
    UDP 传输速度比 TCP 快,但容易丢包、数据到达顺序无保证、缺乏拥塞控制、秉承尽最大努力交付的原则,体现了不可靠。
    使用UDP协议时,不需要建立连接,只需要知道对方的IP地址和端口号,就可以直接发数据包。但是,能不能到达就不知道了。

    一、 udp网络程序-发送数据

    图片.png

    代码如下:

    #coding=utf-8
    import socket
    def main():
    
      while True:
            # 创建一个udp套接字
            udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
            # 使用套接字收发数据
            # 对方的ip以及port
            # dest_address =
            send_data = input("请输入要发送的数据:")
            if send_data == "exit":
                break
            udp_socket.sendto(send_data.encode("utf-8",errors="strict"), ("192.168.140.154", 7788))
            # 关闭套接字
            udp_socket.close()
    if __name__ == '__main__':
        main()
    
    

    代码写好了,验证很关键,则需安装socket调试工具(针对mac端)

    安装方法:
    1. 首先安装brew工具,命令行输入
    /usr/bin/ruby -e "$(curl -fsSL [https://raw.githubusercontent.com/Homebrew/install/master/install](https://raw.githubusercontent.com/Homebrew/install/master/install))"
    
    1. 安装saka仓库
    brew tap rangaofei/saka
    
    1. 然后安装软件
    brew install sokit
    
    1. 因为要依赖qt,所以安装会稍微慢一点,安装成功后执行命令即可:
    sokit
    

    注意:第1, 3安装会稍微慢一点,请耐心等待。

    启动之后便会出现


    图片.png

    二、 udp网络程序-接收数据

    import socket
    
    def main():
    
        # 1.创建套接字
        udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
        # 2. 绑定一个本地信息
        udp_socket.bind(("",7788))
        # 3. 接收数据
        recv_data = udp_socket.recvfrom(1024) #  # 1024表示本次接收的最大字节数
    
        # 4. 打印接收到的数据
        print(recv_data)
    
        # 5. 关闭套接字
        udp_socket.close()
    
    if __name__ == '__main__':
        main()
    
    
    图片.png

    此时就可以看到控制台里面打印


    图片.png

    三、 案例——udp聊天器

    import socket
    
    
    def send_msg(udp_socket):
        # 发送
        dest_ip = input("请输入对方的IP:")
        dest_port = int(input("请输入对方的port:"))
        send_data = input("请输入要发送的数据:")
        udp_socket.sendto(send_data.encode("utf-8"), (dest_ip, dest_port))
    
    
    def recv_msg(udp_socket):
        # 接收并显示
        recv_data = udp_socket.recvfrom(1024)
        print("%s:%s" % (str(recv_data[1]), recv_data[0].decode("utf-8")))
    
    
    def main():
        # 创建套接字
        udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
        # 绑定信息
        udp_socket.bind(("", 8833))
    
        # 循环来出来进行处理事情
        while True:
            print("1:发送消息\n2:接收消息")
            input_str = input("请输入选择的功能:")
            if input_str == "1":
                # 发送数据
                send_msg(udp_socket)
            elif input_str == "2":
                # 接收数据
                recv_msg(udp_socket)
            elif input_str == "0":
                # 退出程序
                break
            else:
                print("请输入正确的功能")
        # 关闭套接字
        udp_socket.close()
    if __name__ == '__main__':
        main()
    
    图片.png

    小结

    udp网络程序(发送、接收数据).png

    相关文章

      网友评论

          本文标题:Python 网络编程 - 02 udp网络程序(发送、接收数

          本文链接:https://www.haomeiwen.com/subject/wgpruqtx.html