Python网络编程---基于UDP的发送与接收数据(学习记录)

先展示代码:

from socket import *

udp_socket = socket(AF_INET, SOCK_DGRAM)

dest_addr = ('127.0.0.1', 9988)

data = input("输入发送的内容:")

udp_socket.sendto(data.encode('gbk'), dest_addr)

recv = udp_socket.recvfrom(1024)

print("收到的数据为:", recv[0].decode('gbk'))
print("发送方地址:{}:{}".format(recv[1][0], recv[1][1]))

udp_socket.close()

Python网络编程---基于UDP的发送与接收数据(学习记录)_第1张图片
Python网络编程---基于UDP的发送与接收数据(学习记录)_第2张图片

描述:

第一行from socket import *
作用是导入socket模块,socket模块是底层网络模块,这个模块提供了访问 BSD 套接字 的接口。
详细可查询官网Socket描述

第二行udp_socket = socket(AF_INET, SOCK_DGRAM)
创建一个UDP套接字,Python官网对于套接字的描述:套接字 。
简单来讲,我们会用这个套接字对数据进行接收和发送。

第三行dest_addr = ('127.0.0.1', 9988)
创建一个元组,用来表示目的地址的IP和端口号,第一个元素是IP,类型为字符串,第二个元素是端口号,类型为整型

第四行data = input("输入发送的内容:")
用来输入用户需要发送的内容

第五行udp_socket.sendto(data.encode('gbk'), dest_addr)
套接字使用sendto函数将数据通过127.0.0.1的9988端口发送过去,sendto的第一个参数为字符串,用来发送需要传输的数据,通过encode(‘gbk’)转为GBK编码;第二个参数是一个元组,存放IP和端口号

第六行recv = udp_socket.recvfrom(1024)
用来接收对方输入给我们的内容,1024表示单词最大发送数据为1024字节

对于七、八行,如果替换为print(recv),我们可以看到这样的结果:
Python网络编程---基于UDP的发送与接收数据(学习记录)_第3张图片
由图可知,返回的结果是一个二维元组,所以 recv[0] 表示对方传给我们的数据(接收到的数据),recv[1][0] 表示接收到的IP地址,recv[1][1] 表示接收到的端口号

最后一行udp_socket.close()
用来释放socket

若要固定自己发送的端口号,可加上下述代码

locad_addr = ('', 9000)
udp_socket.bind(locad_addr)

Python网络编程---基于UDP的发送与接收数据(学习记录)_第4张图片

软件网络调试助手(NetAssist)下载: 链接


"""
udp 聊天器
"""
from socket import *
def send_msg(udp_socket):
    dest_ip = input("请输入目标IP:")
    dest_port = int(input("请输入端口号:"))
    data = input("请输入要发送的内容:")
    udp_socket.sendto(data.encode('GBK'),(dest_ip,dest_port))

def recv_msg(udp_socket):
    recv_data = udp_socket.recvfrom(1024)
    print("收到内容:", recv_data[0].decode('GBK'))
    print("发送地址:{}:{}".format(recv_data[1][0], recv_data[1][1]))

def main():
    udp_socket = socket(AF_INET, SOCK_DGRAM)
    local_addr = ('', 7890)
    udp_socket.bind(local_addr)
    while True:
        print("*" * 30)
        print("1.发送信息")
        print("2.接收信息")
        print("*" * 30)
        num = input("请输入选项(回车结束):")
        if not num:
            print("Bye")
            break
        elif num == "1":
            send_msg(udp_socket)
        elif num == "2":
            recv_msg(udp_socket)
        else:
            print("无效输入!")
            continue


if __name__ == '__main__':
    main()

你可能感兴趣的:(udp,网络,python)