python的基础以及提高

Python day04_UDP

2018-05-23  本文已影响0人  g_s_007
UDP 简介

UDP : user datagram protocol  用户数据报协议

UDP 的特点:不用面向连接 不可靠 传输速度快 适合做广播

上代码:

一、 udp 发送数据:

import socket

# 判断模块是否是主模块,判断是否是程序的入口

if __name__ == '__main__':

    # 1. 创建udp的协议的socket

    # AF_INET: 表示ip地址的类型, ipv4

    # SOCK_DGRAM: 表示udp传输协议类型

    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

    # 2. 准备发送的数据

    send_content = "哈哈,学习了socket"

    # 总结: 乌版图网络调试助手使用utf-8解码,window网络调试助手使用gbk进行解码

    # 字符串转二进制->字符串编码成为二进制数据

    send_data = send_content.encode("gbk")

    print(send_data)

    # 3. 发送数据

    udp_socket.sendto(send_data, ("192.168.36.110", 9090))

    # 4. 关闭socket

    udp_socket.close()

二、UDP 接收数据

import socket

if __name__ == '__main__':

    # 创建udpsocket

    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

    # 发送数据

    udp_socket.sendto("哈哈,我又来了!".encode("gbk"), ("192.168.36.110", 9090))

    # 接收数据 1024:表示每次接收最大的字节数

    # 提示: recvfrom 会阻塞程序,等待接收到数据以后代码才能继续往下执行

    recv_data, ip_port = udp_socket.recvfrom(1024)

    # 对二进制数据进行解码

    # 解码:把二进制转成字符串

    recv_content = recv_data.decode("gbk")

    print(recv_content, ip_port)

    udp_socket.close()

小项目 UDP 聊天器

# 导入socket

import socket

def send_msg():

    # 准备发送数据

    send_info = input("请输入要发送的内容:")

    send_data = send_info.encode("gbk")

    # 输入window 端的IP 以及程序的端口号

    dest_ip = input("请输入对方的IP:")

    dest_port = input("请输入对方的端口号:")

    # 发送数据到windows

    udp_socket.sendto(send_data, (dest_ip,int(dest_port)))

def recv_msg():

    # 创建udp socket

    #udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

    # 准备接收数据

    recv_info = udp_socket.recvfrom(1024)

    print(recv_info[0].decode("gbk"), recv_info[1], sep=">>>")

if __name__ == '__main__':

    # 创建udp socket

    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

    while True:

        cmd = input("请输入要执行的指令:1[发送数据],2[接收数据],3[退出程序]")

        if cmd == '1':

            send_msg()

        elif cmd == '2':

            recv_msg()

        elif cmd == '3':

            break

    # 关闭socket

    udp_socket.close()
上一篇下一篇

猜你喜欢

热点阅读