Python 基础 之 网络 socket 使用 udp (SOCK_DGRAM)实现简单的消息发送和接收

Python 基础 之 网络 socket 使用 udp (SOCK_DGRAM)实现简单的消息发送和接收

 

Python 基础 之 网络 socket 使用 udp (SOCK_DGRAM)实现简单的消息发送和接收

 

目录

Python 基础 之 网络 socket 使用 udp (SOCK_DGRAM)实现简单的消息发送和接收

一、简单介绍

二、实现原理

三、注意事项

四、效果预览

五、实现步骤

socket udp 消息发送

socket udp 接收消息

六、关键代码

附录:NetAssist (网络调试助手)可以百度搜索下载即可


 

一、简单介绍

Python是一种跨平台的计算机程序设计语言。是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立的、大型项目的开发。Python是一种解释型脚本语言,可以应用于以下领域: Web 和 Internet开发、科学计算和统计、人工智能、教育、桌面界面开发、软件开发、后端开发、网络爬虫。

本节简单介绍,使用 python 进行网络通讯的的案例,socket udp 实现消息的发送和接收的简单使用。

 

二、实现原理

1、socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 创建套接字

2、socket.sendto 和 socket.recvfrom 发送和接收消息

3、借助 NetAssist (网络调试助手)进行功能验证

 

三、注意事项

1、如果 socket.bind 绑定ip和端口,会自动绑定本地ip和动态端口

2、注意发送带有中文等消息的时候,注意进行encode和decode

3、中文的注意区分 utf-8 还是 gbk (我这里使用的是 Windows 平台的 NetAssist ,使用gbk 编解码 )

4、创建完 socket 最后记得关闭 socket.close

 

四、效果预览

Python 基础 之 网络 socket 使用 udp (SOCK_DGRAM)实现简单的消息发送和接收

 

五、实现步骤

 socket udp 消息发送

1、打开 pycharm 新建一个工程,即可新建一个python文件

Python 基础 之 网络 socket 使用 udp (SOCK_DGRAM)实现简单的消息发送和接收

 

2、打开 NetAssist (网络调试助手)开启 udp 服务,

Python 基础 之 网络 socket 使用 udp (SOCK_DGRAM)实现简单的消息发送和接收

 

3、编写脚本,实现使用 socket 数据报发送消息的功能(发送 ip 和 端口既是开启 udp 服务的 ip 端口)

Python 基础 之 网络 socket 使用 udp (SOCK_DGRAM)实现简单的消息发送和接收

 

4、运行脚本,即可向 NetAssist  发送数据

Python 基础 之 网络 socket 使用 udp (SOCK_DGRAM)实现简单的消息发送和接收

 

socket udp 接收消息

1、打开 pycharm 新建一个工程,即可新建一个python文件

Python 基础 之 网络 socket 使用 udp (SOCK_DGRAM)实现简单的消息发送和接收

 

2、打开 NetAssist (网络调试助手)开启 udp 服务,

Python 基础 之 网络 socket 使用 udp (SOCK_DGRAM)实现简单的消息发送和接收

 

3、编写脚本,实现使用 socket 数据报接收消息的功能(绑定一个端口,便于接收 NetAssist 发过来的消息 )

Python 基础 之 网络 socket 使用 udp (SOCK_DGRAM)实现简单的消息发送和接收

 

4、运行脚本,即可接收 NetAssist 发过来的消息

Python 基础 之 网络 socket 使用 udp (SOCK_DGRAM)实现简单的消息发送和接收

 

六、关键代码

1、UdpBaseUse_Send_01.py

import socket   # 引进 socket 包


def udp_use_send(ip, port):
    """
    使用 udp 发送数据
    :param ip: 目标 ip
    :param port:目标 端口
    :return:
    """

    # 创建一个 udp 套接字
    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

    # 绑定本地ip和自定义端口(如果没有这边,程序会自动动态绑定本地ip和动态端口)
    udp_socket.bind(("", 7878))

    while True:
        # 键盘输入数据
        msg = input("请输入数据……")
        # 发送数据到指定 ip
        # udp_socket.sendto(msg.encode('utf8'), (ip, port))
        # windows 系统使用 gbk
        udp_socket.sendto(msg.encode('gbk'), (ip, port))

        # 发送 bye 退出
        if msg == "bye":
            break

    # 关闭套接字
    udp_socket.close()


def main():
    ip = "192.168.1.102"
    port = 8080

    udp_use_send(ip, port)


if __name__ == "__main__":
    main()

 

2、UdpBaseUse_Recieve_02.py


import socket


def udp_use_receive():

    # 创建套接字
    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

    # 绑定一个本地 IP 和 指定端口号
    local_address = ("", 5566)
    udp_socket.bind(local_address)

    # 接收数据
    while True:
        recv_data = udp_socket.recvfrom(1024)

        # recv_data 这个变量中存储的是一个元组(接收到的数据,(发送数据端的ip,port))
        recv_msg = recv_data[0]     # 消息数据
        send_addr = recv_data[1]    # 发消息端的 ip + port

        # 打印数据
        print(recv_data)

        # 数据解码
        # recv_msg = recv_msg.decode("utf-8")
        # windows 端 数据解码 gbk
        recv_msg = recv_msg.decode("gbk")

        # 重新组合数据打印数据
        print("%s:%s" % (str(send_addr), recv_msg))

        # 数据是 bye 就退出
        if recv_msg == "bye":
            break

    # 关闭套接字
    udp_socket.close()

    pass


def main():
    udp_use_receive()


if __name__ == "__main__":
    main()

 

附录:NetAssist (网络调试助手)可以百度搜索下载即可

Python 基础 之 网络 socket 使用 udp (SOCK_DGRAM)实现简单的消息发送和接收

 

Python 基础 之 网络 socket 使用 udp (SOCK_DGRAM)实现简单的消息发送和接收

上一篇:Python实现简易HTTP服务器与MINI WEB框架(利用WSGI实现服务器与框架解耦)


下一篇:【计算机网络课程设计】2019-智能家居协议设计