Socket.Receive 无法预知字节长度的数据接收

socket编程包的长度 <br />包没有固定长度,以太网限制在46-1500字节,1500就是以太网的MTU,超过这个量,TCP会为IP数据报设置偏移量进行分片传输,现在一般可允许应用层设置8k(NTFS系统)的缓冲区,8k的数据由底层分片,而应用层看来只是一次发送。<br />        windows的缓冲区经验值是4k。<br />        Socket本身分为两种,流(TCP)和数据报(UDP),你的问题针对这两种不同使用而结论不一样。甚至还和你是用阻塞、还是非阻塞Socket来编程有关。<br />      阅读详情

话不多说直接上代码:

string recvStr = "";
byte[] recvBytes = new byte[1024];
int bytes;
do
{
	bytes = clientSocket.Receive(recvBytes, recvBytes.Length, 0); //从客户端接受消息
	recvStr += Encoding.ASCII.GetString(recvBytes, 0, bytes);
} while (bytes == 1024);
Console.WriteLine("{0} 收到:{1}", clientSocket.RemoteEndPoint.ToString(), recvStr);

C# Socket编程从入门到实战:解决粘包、高并发与工业通讯 网络编程是软件开发的基础,其核心在于理解数据如何在计算机间传输。TCP/IP协议栈定义了网络通信的底层原理,而Socket作为操作系统提供的网络编程接口,是这一原理的具体实现。掌握Socket技术价值在于突破高级网络库的限制,实现对通信流程的精细控制,从而构建高性能、高可靠性的网络应用。在工业控制、物联网、游戏服务端等应用场景中,直接操作Socket能够满足自定义协议、设备直连等特殊需求。本文聚焦C#中的Socket编程,深入探讨粘包拆包、异步高并发等核心问题,并结合连接超时、端口占用等常见错误,提供实战排 阅读详情

相关推荐

C语言手动实现HTTP客户端:从Socket到协议解析的底层网络编程实践

网络编程是计算机通信的基石,其核心在于理解TCP/IP协议栈与Socket编程模型。通过Socket API,应用程序能够在传输层建立可靠的字节流连接,实现端到端的数据交换。HTTP作为应用层协议,构建于TCP之上,定义了客户端与服务器间的请求响应格式。掌握手动实现HTTP通信的技术价值在于深入理解网络协议细节、内存管理与I/O模型,这对于开发高性能服务器、嵌入式网络设备及网络安全工具至关重要。本文聚焦C语言实践,通过动态缓冲区管理、分块传输编码解析等热词,详解如何从零构建健壮的HTTP客户端,为学习Ngi

weixin_33859231的博客 429

如何有效控制c++socket发送和接收数据长度

开始c++ 创建socket编程时候,总是定一个足够大的数组来接收数据,从效率上讲是不科学的,如果能控制发多少接收多少是理想状态,下面例子说明: bool CMySocket::Send(const char *pSMsg, int len) { char* sendBuff = new char[len + 4];//申请发送数组,+4是要发送长度所占的字节数 byte lenBuff[4] = { 0 };//长度数组并初始化 int2bytes(len, lenBuff, ...

zhuimr520的博客 2988

深入libwebsockets HTTPS客户端:从事件驱动到TLS配置的实战指南

在Linux网络编程中,HTTPS连接处理是开发者必须掌握的核心技能,它基于TCP/IP协议栈,并通过TLS/SSL协议层实现数据传输加密与身份验证。其原理在于通过非对称加密协商会话密钥,建立安全信道,确保通信的机密性与完整性。掌握HTTPS客户端实现的技术价值在于能够构建高性能、可定制化的嵌入式或后端服务通信模块,摆脱对curl等命令行工具的依赖。在实际应用场景中,这尤其适用于需要低延迟、高并发连接管理的物联网设备云通信或微服务API交互。本文聚焦libwebsockets这一轻量级C网络库,通过解析其事

weixin_33806300的博客 989

Socket的Send,Recv的长度问题

         一个包没有固定长度,以太网限制在46-1500字节,1500就是以太网的MTU,超过这个量,TCP会为IP数据报设置偏移量进行分片传输,现在一般可允许应用层设置8k(NTFS系统)的缓冲区,8k的数据由底层分片,而应用层看来只是一次发送。        windows的缓冲区经验值是4k。        Socket本身分为两种,流(TCP)和数据报(UD

思维空间 2950

STM32多串口通信与物联网数据终端开发实战

串口通信是嵌入式系统实现设备间数据交换的基础技术,其原理基于异步串行通信协议,通过TX/RX引脚在MCU与外围模块间传输数据帧。这项技术的核心价值在于为资源受限的嵌入式设备提供了可靠、低成本的外部互联能力,广泛应用于工业控制、环境监测和智能家居等物联网终端场景。本文以构建一个本地数据交互中枢为例,深入探讨了如何利用STM32的多个USART接口,同时驱动迪文串口屏进行人机交互,并通过ESP8266 WIFI模组实现网络接入,最终完成从传感器数据采集、本地实时显示到云端远程监控的完整数据流整合,为开发高可靠性

weixin_30660027的博客 369

CAPL调用DLL实现RS232与TCP仪器控制:汽车电子测试集成方案

在汽车电子与嵌入式系统测试中,自动化测试框架需要与各类外部设备进行通信,其中串口(RS232)和TCP/IP网络通信是常见的技术手段。通过动态链接库(DLL)封装底层通信协议,可以实现测试脚本与硬件设备的稳定交互,提升测试系统的可扩展性和复用性。这种技术方案尤其适用于集成非标仪器、程控电源等设备到主流测试环境(如Vector CANoe)中,解决CAPL脚本在直接操作硬件接口时的局限性。本文基于实际工程实践,详细介绍了如何设计并实现一个支持SCPI协议与自定义二进制协议的通用DLL,涵盖线程安全、连接池管理

weixin_33968104的博客 424

Socket处理发送和接收数据包,一个小实例:

Socket处理发送和接收数据包,一个小实例:using System.Net.Sockets;Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);socket.Connect(ipUrl, port); //参数是接收的服务器ip地址和端口string strReq...

weixin_33755554的博客 591

DETRs with Collaborative Hybrid Assignments Training论文阅读与代码

在这篇论文中,作者观察到在DETR中将过少的 Query 分配为正样本,采用一对一的集合匹配,会导致对编码器输出的监督稀疏,严重损害编码器的区分特征学习,反之亦然,也会影响解码器中的注意力学习。为了缓解这个问题,作者提出了一种新颖的协同混合分配训练方案,名为Co-DETR,以从多样的标签分配方式中学习更高效、更有效的基于DETR的检测器。这种新的训练方案可以通过训练多个并行辅助 Head ,以一对多的标签分配方式(如ATSS和Faster RCNN)进行监督,轻松增强端到端检测器中编码器的学习能力。

qingjing0413的博客 1154

C# TCP socket发送大数据包时,接收端和发送端数据不一致 服务端接收Receive不完全...

  简单的c# TCP通讯(TcpListener) C# 的TCP Socket (同步方式) C# 的TCP Socket (异步方式) C# 的tcp Socket设置自定义超时时间 C# TCP socket发送大数据包时,接收端和发送端数据不一致 服务端接收Receive不完全     在发送端,一次发送200k个字节,在接收端,一次接收200k个字节, 但是在接收端,...

weixin_34268753的博客 1928

OPTISYSTEM实战指南:线性调频连续波激光雷达系统仿真设计

本文提供了一份基于OPTISYSTEM软件的线性调频连续波激光雷达系统仿真实战指南。文章详细阐述了从软件界面熟悉、核心参数设置,到发射端、信道模型、相干接收端完整系统搭建的全过程,并介绍了性能优化与高级仿真技巧,旨在帮助读者快速掌握利用OPTISYSTEM进行低成本、高效率激光雷达系统设计与验证的方法。

weixin_29288313的博客 296

RoboMaster新手必看:用STM32 HAL库搞定大疆M3508电机正反转(附完整代码)

本文详细介绍了如何使用STM32 HAL库驱动大疆M3508电机实现正反转控制,包括硬件准备、PWM配置、电机校准及完整代码实现。特别针对RoboMaster新手常见问题提供了解决方案,如电机抖动、不转等故障排查,并分享了缓启动、DMA更新等进阶技巧,帮助开发者快速掌握电机控制核心技术。

weixin_42519985的博客 226

Loadrunner Sokcet压力测试接收变长数据的处理

目前知道两种方式,我采用了第一种 1.分两次接受数据 参考http://blog.csdn.net/rachel_luo/article/details/7912468 第一次lrs_receive_ex接受与server约定好的保存长度的字节数, 我的case是前5个字节固定,其中前4个字节表示length,第5个字节表示type 于是我就调用lrs_receive_ex(sock_d...

weixin_34293059的博客 159

UFS 功能描述:UFS boot

UFS 启动过程介绍:启动配置,启动代码下载过程和安全性

m0_51720747的博客 1601

C++ Socket编程避坑指南:5个常见错误及高效解决方案

掌握C++ Socket编程关键技巧,避开常见陷阱。提供可运行的C++ socket 示例,涵盖连接超时、阻塞处理、跨平台兼容等5大问题解决方案,适用于网络通信与服务器开发,高效稳定,值得收藏

PixelIsle的博客 407

反制反心理特征的研究

抓牛股

m0_58032574的博客 908

【LIN总线测试】——LIN主节点数据链路层测试

LIN总线是基于UART/SCI(通用异步收发器/串行接口)的低成本串行通讯协议。其目标定位于车身网络模块节点间的低端通信,主要用于智能传感器和执行器的串行通信,而这正是CAN总线的带宽和功能所不要求的部分。本章节主要介绍LIN主节点数据链路层如何测试?

测试领域技术分享 2612

socket通信的环形缓冲

孙靖      2009.5.5Email:jing_sun999@126.com QQ:272964426前段时间实现了一个小型的C/S架构的多人在线即时通信工具,JIGQQ。其中对使用TCP通信有点心得。 记得在我大学时代,就用VB做过TCP的通信。当然那时候是很初级的,发送的数据量也很小的应用。当时就觉得,有时候发送的数据接收端不能接收到,有时候呢觉得一次性没有接受完毕。前段时间

曾梦想仗剑走天涯 5364

【uniapp踩坑记】App Store上传失败:Invalid Swift Support错误怎么解决?

作为一个前端出身的开发者,用 uniapp 开发原生 App 已经够挑战了,打包 iOS 上传 App Store 更是处处暗雷。这次的坑虽然小,但确实容易忽略。如果你也遇到了类似的报错,希望这篇文章能帮你少踩一次坑!

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1143

C语言实现HTTP响应处理:从Socket到状态码解析的工业级实践

HTTP协议作为应用层通信的基础,其本质是在TCP字节流之上定义了一套文本格式的消息规范。理解其工作原理,关键在于掌握如何在无消息边界的TCP流中,准确切分出结构化的HTTP响应消息。这涉及到状态机设计、动态缓冲区管理和协议解析等核心技术,对于构建高性能网络中间件、嵌入式设备通信模块或深入理解网络编程模型具有重要价值。在工业实践中,高效处理不定长响应体、解析跨行头部字段以及设计健壮的状态码分类逻辑,是提升系统可靠性的关键。本文以C语言为例,通过socket编程和手动内存管理,详细演示了如何从零构建一个支持动

weixin_34216107的博客 361

欺诈文本分类微调(一):基座模型选型

通义千问Qwen2具有0.5B、1.5B、7B、72B等一系列参数大小不等的模型,我们需要做的是从大到小依次测试每个模型的能力,找到满足自己需要的最小参数模型。依1.5B和1.5B-Instruct的主要区别:按照官方文档,前者是预训练模型,后者是经过指令微调的模型。

golfxiao的专栏 2655

深度学习工具包 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")

C语言手搓HTTP客户端:从Socket到协议解析的深度实践

网络编程是现代软件开发的核心技能之一,其基础在于理解计算机之间如何通过网络协议进行通信。HTTP协议作为应用层最广泛使用的协议,其本质是基于TCP/IP协议栈的请求-响应模型。通过Socket编程接口,开发者可以在传输层建立可靠的TCP连接,实现数据的收发。掌握HTTP报文格式的构造与解析,不仅能加深对网络分层模型的理解,更是构建高性能、轻量级网络应用(如嵌入式系统、物联网设备或自定义中间件)的关键。在实践中,正确处理TCP流式协议带来的消息边界问题,以及运用动态内存管理技术处理可变长的响应数据,是提升程序

cuili5839的博客 691

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Linux C/C++ UDP套接字编程实战:从原理到回声服务器实现

在网络编程中,套接字(Socket)是进程间通信的核心接口,它抽象了网络数据传输的底层细节。其工作原理是基于操作系统提供的系统调用,在应用层与传输层之间建立桥梁,实现不同主机间的数据交换。UDP(用户数据报协议)作为一种无连接的传输层协议,其技术价值在于提供了低延迟、高吞吐量的通信能力,特别适合对实时性要求高、可容忍少量丢包的场景,如音视频直播、在线游戏和物联网传感数据上报。通过理解UDP套接字编程中的字节序转换、数据报边界处理等核心机制,开发者能够构建轻量级、高性能的网络应用。本文以Linux C/C++

weixin_30770783的博客 357

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

QT与Unity3D跨进程通信:基于TCP/IP与心跳机制的稳定实现方案

在跨平台应用开发中,进程间通信(IPC)是实现模块化与协同工作的关键技术。其核心原理在于通过操作系统提供的机制,在不同进程间安全、高效地交换数据。TCP/IP协议栈作为网络通信的基础,提供了可靠、有序的字节流传输能力,是实现跨进程、跨主机通信的通用方案。在工程实践中,基于TCP/IP的Socket通信能够有效解决传统IPC方式(如共享内存、管道)在跨平台兼容性、稳定性方面的不足,尤其适用于需要处理复杂业务逻辑与实时3D渲染的异构系统集成场景。通过设计自定义的应用层协议(如消息头+消息体结构)并嵌入心跳机制,

weixin_30781107的博客 414

TI EMAC硬件QOS与帧分类:嵌入式网络实时性优化实战

在嵌入式网络开发中,服务质量(QoS)是保障关键数据流实时性的核心技术。其原理是通过优先级调度与流量控制,在网络拥塞时优先处理高优先级数据包,从而满足工业控制、汽车电子等场景对确定性的严苛要求。硬件QoS技术将分类与过滤逻辑从CPU卸载至网络控制器,实现了零CPU开销的极低延迟处理,为高实时性任务构建了可靠的数据通道。本文以TI处理器的EMAC模块为例,深入解析其基于VLAN优先级标签的硬件接收QoS机制与精细的帧分类规则,探讨如何在驱动层面配置缓冲区阈值、管理描述符回收,并解决实际部署中的典型问题,为构建

weixin_30265103的博客 339

MPC8315E eTSEC硬件TOE与QoS机制:驱动开发与网络性能优化实战

在网络设备开发中,硬件卸载技术是提升系统性能、释放CPU算力的关键。其核心原理是将网络协议栈中计算密集且规则固定的任务,如TCP/IP校验和计算与协议头解析,从通用CPU转移到网络控制器的专用硬件中执行。这项技术的核心价值在于显著降低CPU负载,从而为应用层处理留出更多计算资源,尤其适用于高吞吐、低延迟的嵌入式网络场景。具体到应用层面,硬件卸载与服务质量机制协同工作,能够实现基于内容(如IP地址、端口、DSCP值)的智能流量分类与优先级处理。本文以NXP MPC8315E处理器的增强型三速以太网控制器为例,

305
上一篇: Android 不通过USB数据线调试的方法
下一篇: office转换为html在线预览
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值