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

2019-03-09  本文已影响0人  flowerflower
◉❥◉

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
上一篇 下一篇

猜你喜欢

热点阅读