ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2021-02-07 12:02:44  阅读:179  来源: 互联网

标签:DGRAM udp socket ip msg NetAssist recv


 

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

 

四、效果预览

 

五、实现步骤

 socket udp 消息发送

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

 

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

 

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

 

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

 

socket udp 接收消息

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

 

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

 

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

 

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

 

六、关键代码

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 (网络调试助手)可以百度搜索下载即可

 

标签:DGRAM,udp,socket,ip,msg,NetAssist,recv
来源: https://blog.csdn.net/u014361280/article/details/113737900

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有