当前位置: 移动技术网 > IT编程>脚本编程>Python > Python 使用 UDP方式传输接收数据

Python 使用 UDP方式传输接收数据

2020年07月18日  | 移动技术网IT编程  | 我要评论
前言:由于在项目中需要使用UDP进行通信,经过学习查找资料实现了在同一台电脑上自发自收功能,现在分享代码如下,如有问题,欢迎指正。此代码亦可以延伸其他功能。运行系统:Ubuntu18.04运行环境:python3.6.91、自动获取本地IP地址def GetHostIP(): try: Socke = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) Socke.connect(('8.8.8.8',

前言:由于在项目中需要使用UDP进行通信,经过学习查找资料实现了在同一台电脑上自发自收功能,现在分享代码如下,如有问题,欢迎指正。此代码亦可以延伸其他功能。


运行系统:Ubuntu18.04

运行环境:python3.6.9


1、自动获取本地IP地址

def GetHostIP():
    try:
        Socke = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        Socke.connect(('8.8.8.8', 80))
        IP = Socke.getsockname()[0]
    finally:
        Socke.close()

    print(IP)
    return IP

2、发送数据端

def send_data():
    IP_daar = GetHostIP()
    while True:
        # 1. 创建udp套接字
        udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

        # 2. 准备接收方的地址        
        dest_addr = (IP_daar, 8080)  # 注意 是元组,ip是字符串,端口是数字

        # 3. 从键盘获取数据
        send_data = b'\x08\x00\x00\x00\x81@\x02\x00\x1d\x00\x00\x00\x10'
        # send_data = input("请输入要发送的数据:")

        # 4. 发送数据到指定的电脑上的指定程序中
        udp_socket.sendto(send_data, dest_addr)
        print("发送给客户端 %s 的数据: %s\n" % (dest_addr, send_data))
        sleep(1)

        # 5. 关闭套接字
        udp_socket.close()

3、数据接收端

def receive_data():
    IP_daar = GetHostIP()

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

    # 2. 准备接收方的地址
    dest_addr = (IP_daar, 8080)

    # 3. 绑定地址
    udp_socket.bind(dest_addr)

    while True:
        # 4. 等待接收对方发送的数据
        receive_data, client_address = udp_socket.recvfrom(1024)
        print("接收到了客户端 %s 传来的数据: %s\n" % (client_address, receive_data))

    # 5. 关闭套接字
    udp_socket.close()

4、主函数

import socket
from threading import Thread
from time import sleep


# 此处添加上述三个函数即可


if __name__ == '__main__':    
    t = Thread(target=send_data)
    t.start()
    while True:
        receive_data()

5、运行结果


至此实现了自己的测试功能。如果不当之处,欢迎指正!

本文地址:https://blog.csdn.net/r1141207831/article/details/107409392

如您对本文有疑问或者有任何想说的,请 点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网