单播组播共用一个端口号

Java实现单播,组播,广播 单播、组播、广播介绍:https://blog.youkuaiyun.com/ahou2468/article/details/86526509 目录   1.单播、组播、广播关键类说明 2.单播和广播的具体实现 2.1定义套接字管理类 2.2单播或者广播发送数据包类 2.3.单播或者广播接收数据包监听 3.组播的具体实现 3.1定义套接字管理类 3.2组播发送数据包类 3.3组播接收数... 阅读详情

让同一个端口号,既可以接收单播也可以接收组播的方法!

/*************************************************************************
  > File Name: udp.c
  > Author: huochuanfei
  > Mail: 597092440@qq.com 
  > Created Time: 2021-05-21 14:22:28
 ************************************************************************/

#include <stdio.h>
#include <string.h>
#include <inttypes.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <linux/sockios.h>
#include <linux/if.h>
#include <stdlib.h>


int sockfd = 0;

/**********************************************
 * function: create_mul_fd
 * Author: huochuanfei
 * Mail: 597092440@qq.com
 * Created Time: 2020-11-10
*********************************************/
static int create_mul_fd(int port, uint32_t ip)
{
	int fd = 0;
	int loop = 1;
	struct ifreq ifq;
	struct ip_mreq mreq;
	struct sockaddr_in addr;
	memset((char*)&addr, 0x0, sizeof(struct sockaddr_in));
	strncpy(ifq.ifr_name, "wlp3s0", IFNAMSIZ);
	if ((fd = socket(AF_INET, SOCK_DGRAM ,0)) <= 0) {
		printf("socket:%m\n");
		exit(1);
	}
	int yes = 1;
	if (setsockopt(fd,SOL_SOCKET,SO_REUSEADDR,&yes,sizeof(yes)) < 0) {    
		perror("Reusing ADDR failed");    
		exit(1);    
	}

	addr.sin_family = AF_INET;
	addr.sin_port = htons(port);
	addr.sin_addr.s_addr = htonl(INADDR_ANY);/* 很关键,不能绑定具体IP */
	if (setsockopt(fd, IPPROTO_IP, IP_MULTICAST_LOOP, &loop, sizeof(loop)) < 0) {
		printf("setsockopt");
		exit(1);
	}
	if (bind(fd, (struct sockaddr*)&addr, sizeof(struct sockaddr)) < 0) {
		printf("bind2:%m\n");
		exit(1);
	}
	mreq.imr_multiaddr.s_addr = ip;
	mreq.imr_interface.s_addr = inet_addr("192.168.1.66");
	if (setsockopt(fd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq)) < 0) {
		printf("setsockopt");
		exit(1);
	}

	return fd;
}

int main() {
	sockfd = create_mul_fd(9999, inet_addr("224.9.9.9"));
	if (sockfd < 0) {
		printf("listen_mult: %d\n", sockfd);
		return -1;
	}
	char buf[1024] = {0};
	int ret = 0;

	while (1) {
		memset(buf, 0x0, sizeof(buf));
		ret = recv(sockfd, buf, sizeof(buf), 0);
		printf("%d: %s\n", ret, buf);
	}


	return 0;
}
c语言实现udp广播和组播 2、填充服务端的结构体,绑定广播地址和端口号(struct sockaddr_in serveraddr,serveraddr.sin_addr.s_addr = htonl(INADDR_ANY)))(需要设置端口复用) 3、创建结构体存放客户端IP和端口,接收数据。C类IP地址就由3字节的网络地址和1字节主机地址组成,网络地址的最高位必须 是“110” 13 C类地址范围 192.0.0.1 - 223.255.255.254 //192.168.14.2。发送给该地址的数据包被所有主机接收。 阅读详情

相关推荐

基于Winsock的UDP组播通信入门

Winsock初始化过程:首先确保包含对应版本的头文件,然后保证链接对应的库文件(可以在代码中使用#pragma comment(lib, "WS2_32"),或在编译器项目属性中链接器->输入->附加依赖项中添加ws2_32.lib);接收端在本地绑定对应的固定端口,然后加入到组播的群组,最终实现数据的共享。否则根据发现的问题,提炼概念,百度或请人求教。UDP即用户数据报协议(UDP,User Datagram Protocol),无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。

李大旗的博客 4298

linux 测试组播端口,在同一个端口上接收多个组播源 – C,Linux

[编辑以澄清bind()实际上可能包括多播地址.]因此,应用程序正在加入几个组播组,并将接收到的消息发送到同一个端口. SO_REUSEPORT允许您将多个套接字绑定到同一端口.除了端口,bind()需要一个IP地址. INADDR_ANY是一个全部地址,但也可以使用IP地址,包括多播地址.在这种情况下,只有发送到该IP的数据包将被传递到套接字.即您可以创建多个套接字,每个组播组一个. bind(...

weixin_35663823的博客 1898

组播,单播和广播相关

1,单播用于两个主机之间的端对端通信,广播用于一个主机对整个局域网上所有主机上的数据通信。单播和广播是两个极端,单播对一个主机进行通信,广播对整个局域网上的主机进行通信。 多播,也称为“组播”,将局域网中同一业务类型主机进行了逻辑上的分组,进行数据收发的时候其数据仅仅在同一分组中进行,其他的主机没有加入此分组不能收发对应的数据。 2,IP地址 和 子网掩码的概念 (1)IP地址的概念和分类 IP地址本质就是在互联网中的唯一地址标识,其数据类型为32位二进制组成的整数(ipv4),当然也有128位二进制

wangjie36的博客 4403

UDP单播 组播 广播 区别及简单实现

无论是tcp还是udp 服务器都必须绑定prot、Ip,客户端可以有选择性。 udp单播: 单播只能是发送方往接收方指定的IP 端口发送数据 组播需具备的条件 1、接收方设置组播属性及组播号 2、发送方往接收方定义的组播地址发送 3、服务器客户端端口号需要一致 广播需具备的条件 1、接收方设置广播属性 2、发送方往接收方定义的组播地址发送 3、服务器客户端端口号需要一致 组播和单...

huangtianyi1994的博客 1万+

Qt实现UDP单播、组播和广播功能

对象会选择其中一个地址来接收数据包。这个选择通常由操作系统或网络栈决定,并且可能会受到各种因素的影响,例如网络接口的优先级、路由表等。对象绑定到本机的所有 IPv4 地址,但实际上它只能通过其中一个地址接收数据包。然而,需要注意的是,绑定到多个 IPv4 地址并不意味着可以同时从多个地址接收数据包。对象可以接收通过本机的任意一个 IPv4 地址发送到指定端口的数据包。对象绑定到本机的所有 IPv4 地址。多网口的话,要指定唯一的网卡ip,之后加入组播。对象只能通过一个 IP 地址接收数据包。

我智商开挂的博客 1万+

Lane、PHY和Preset Value Bit

每个Lane支持不同的传输速度和带宽,例如PCIe 3.0中,一个Lane的传输速度可以达到8 GT/s(Giga Transfers per second),也就是1 GB/s(GigaBytes per second)。Preset Value Bit(预置值位)是在PCIe 3.0的Lane上新引入的一种机制,用于优化信号传输质量。PCIe设备可以包含多个Lane,例如x1、x4、x8、x16等,表示该设备同时使用的Lane数目,比如x16表示该设备采用了16个Lane,具有更高的传输速度和带宽。

weixin_58083606的博客 1295

QT进行UDP通信的学习(单播,组播,广播)

QT版本:Qt 5.5.1 (MSVC 2013, 32 bit) Qt Creator版本:Qt Creator 3.5.1 (opensource) 系统:win10 1.打开QtCreator——新建项目——点击Application——Qt Widgets Application——choose 如图: 2. 项目名称输入QtUdpTest——一路点下一步 3. 在QtUdpTest.p...

weixin_43935474的博客 1万+

算力网:正在编织的“第二电网“

中国算力网:编织智能时代的"第二电网" 中国正在构建全国一体化算力网,目标让算力资源像水电一样即取即用。这一国家战略通过"东数西算"布局,将东部算力需求与西部清洁能源优势结合,形成三级时延圈(1ms城市级、5ms区域级、20ms国家级)。算力网采用三层架构:基础设施层的八大枢纽节点作为"发电厂",编排管理层的智能调度系统作为"调度中心",运营服务层提供标准化算力服务。关键技术包括算力路由、异构算力统一度量、无损网络和液冷技术等。

这只是一个博客 664

【QT】QT中UDP通信的实现(单播、组播和广播)

目录 效果展示 实现过程 数据发送端 数据接收端 效果展示 实现过程 Qt网络编程---UDP通信 工程中添加 QT += network QUdpSocket 数据发送端 1. 创建QUdpSocket对象 QUdpSocket msocket 2. 调用对象方法发送数据(ip , 端口号) 头文件 #ifndef UDPSEND_H ...

Jason的技术探索与分享 8896

基于Ollama本地大模型的Python自动化翻译工具开发实践

本文详细介绍了如何利用Ollama本地大模型和Python开发自动化批量翻译工具。通过部署本地开源模型、设计精准提示词、处理长文本分割及多种文档格式,构建了一个兼顾隐私安全、可控性与成本效益的翻译流水线,有效解决了文档批量翻译的痛点。

yhn45678901的博客 560

BERT + BiLSTM-CRF 处理流程

BERT是一个基于 Transformer 的预训练语言模型。与传统的语言模型不同,BERT 是双向的,即它同时利用上下文信息进行词表示学习。BERT 在大规模语料库上进行预训练,可以捕捉到深层次的语言知识和上下文关系,生成非常丰富的词向量表示。在序列标注任务中,BERT 被用作输入文本的编码器,将每个词映射为上下文相关的词嵌入(embeddings)。

AI Agent 首席体验官 2254

单播、组播、广播

首先,需要确定一个特定的组播IP地址来定义一个组播组。这个组播IP地址就是用来标识这个组播组的。

Where there is life, there is hope. 3862

Unity Shader之路(一)什么是Unity Shader?

Unity Shader前言什么是UnityShaderUnity Shader和材质的关系 前言 众所周知,要想当游戏开发工程师,Unity中的Shader编写不得不摸,这一系列文章我将描写我的Shader学习之路,致敬冯乐乐的书Unity Shader入门精要,此篇什么是Unity Shader?希望能给后人一点方向 我们刚开始接触Unity的时候,总是会遇到材质,但是不了解材质都是什么,为什么可以在很多材质中选择,为什么有时候选择了其他材质后就不能达到我们想要的结果,为什么资源商店有那么多的材质,山.

TurboQ珞珈 2237

单播、组播(多播)、广播

广播 组播

technologyleader的专栏 3100

【ESP32接入国产大模型之豆包】

🥳🥳🥳现在,我们在本教程中,您学习了如何使用ESP32接入语言大模型之豆包。🛹🛹🛹从而实现对外部世界进行感知,充分认识这个有机与无机的环境,后期会持续分享esp32跑freertos实用案列🥳🥳🥳科学地合理地进行创作和发挥效益,然后为人类社会发展贡献一点微薄之力。🤣🤣🤣如果你有任何问题,可以通过q group(945348278)加入鹏鹏小分队,期待与你思维的碰撞😘😘😘。

vor234的博客 1万+

基于Simulink的雷达跟踪系统仿真(附源码)

此示例包含对雷达系统的基本特征进行建模的子系统。该模型是用于目标位置和速度检测的雷达系统的典型模型。该示例包括雷达脉冲发生器、射频发射器子系统、移动目标的 Simulink 表示、射频接收器和接收模块(Rx 模块)。

珞瑜的博客 3511

UDP的单播广播和组播

单播 数据的发送函数: ssize_t sendto(int sockfd, //UDP 通信SOCKET const void *buf,//数据的缓存区 size_t len, //需要发送的数据大小 int flags, //发送方式 0 阻塞 非0 不阻塞 const struct sockaddr *dest_addr, //接收者的IP地址信息 socklen_t addrlen);//接收者的IP地址的大小 数据的接收函数: ssize_t recvfro

weixin_48256350的博客 2827

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Upd通信之QUdpSocket的unicast单播、broadcast广播、multicast组播

简 述: 了解Upd通信之QUdpSocket的unicast单播、broadcast广播、multicast组播,书写一个简单地例子;然后写了一个小的Qt例子,用来实现和验证它的空间的一些属性和功能的用法。 文章目录系统环境:QUdpSocket讲解:unicast单播/broadcast广播:multicast组播:运行效果:源码分析:unicast单播/broadcast广播:mu...

4269

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

QUdpSocket 单播、组播和广播

1、QT += core gui network 进行UDP通信需要用到的头文件 #include 这里我们把UDP通信分为两个部分写,一个是发送端,另一个是接收端,而发送端中又分为单播、组播和广播三种形式,下面我们先来看看写发送端的代码程序的步骤: 发送端Udpsend的代码: 1、单播 (1)创建套接字 QUdpSocket mSocket; mSocket = new QUdp...

weixin_28941019的博客 4975

TCP/IP卷一:50---单播、任播、组播、广播总体概述

一、总体概述 4种IP地址: 单播(unicast)、任播(anycast)、组播(multicast)、广播(broadcast) IPv4可以使用所有这些地址,而IPv6可以使用除了最后一种形式的所有其他形式的地址 在本专栏的文章中,我们没有涉及的一个主题是在诸如全球互联网的广域网中,组播路由是如何实现的。目前,组播在企业和本地网络中的使用超过在广域网中的使用。尽管我们在本专栏中讨...

董哥的黑板报 3722

Iptv组播转单播研究(openwrt篇)

已知在光猫用户侧配置中设置了网口一的单线复用,IPTV的流量vlan是200,因此在路由器wan口处,要将vlan200的流量分流出来,而openwrt的做法逻辑则是要先创建一个eth1.200的虚拟接口(WAN口物理编号是eth1),接口协议选择DHCP,也可以在知道内网网段的情况下使用静态地址,后文会具体介绍,此时接口eth1.200已经连通运营商上级网络,可以接受IPTV组播数据了,但此时收到的流量形式为udp或rtp,路由器下级设备无法观看,这是由于对于下级设备发出的。

yuciubn的博客 1201

UDP - 单播 组播 广播 理解

UDP 单播 组播 广播

u010624097的博客 1362

LWIP Sokect UDP组播

1 Socket编程-udp服务端和客户端通信 (1).建立一个套接字(Socket) (2).绑定服务器端IP地址及端口号--服务器端 (3).通过SendTo()方法向指定主机发送消息 (需提供主机IP地址及端口) (4).通过ReciveFrom()方法接收指定主机发送的消息 2 UDP信息传递的方式分三类 ① 单播Unicast:是客户端与服务器之间的点...

graduation201209的专栏 4821
上一篇: systemctl配置CENTOS7.5进程上电自起
下一篇: 堆排序(大顶堆)
霍传飞
博客等级 码龄11年 15粉丝 36原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值