今天看了网络编程的基础孙鑫写的稍微给自己理解到得东西做了下总结!

2027年新疆职业院校技能大赛“网络系统管理”A模块网络构建真题 2027年新疆职业院校技能大赛“网络系统管理”A模块——网络构建真题,仅供学习使用。 阅读详情

 

Socket编程首先要包含所需的头文件Winsock2.h并工程中添加库文件ws2_32.lib.
接着加载套接字库所用函数是
WSAStartup( wVersionRequested, &wsaData ); 第一个参数代表的是所要加载的套接字库的版本,第二个参数用于存储返回的版本信息
wVersionRequested = MAKEWORD( 1, 1 );用MAKEWORD来设置版本号的值其中地位代表主版本号
 
TCP编程:
服务器端的编写:
1.         创建套接字
       SOCKET socketSrc = socket(AF_INET, SOCK_STREAM, 0);
       第一个参数:指定地址族在1.1版本中只能使用AF_INET
       第二个参数:指定套接字的类型在1.1版本中指定指定两种一SOCK_STREAM流式套接字和SOCK_DREAM数据报套接字
       第三个参数:指示所要使用的的协议,如果为0则自动选择合适的协议(推荐)
2.         绑定套接字
       bind(socketSrc, (SOCKADDR*)&addsrc, sizeof(SOCKADDR));
       第一个参数:一个未绑定的的套接字
       第二个参数:通过一个SOCKADDR结构体将一个地址分配给套接字
       第三个参数:第二个参数的大小长度
       SOCKADDR结构体: struct sockaddr_in {
                                                               short   sin_family;
                                                                u_short sin_port;
                                                                struct in_addr sin_addr;
                                                                char    sin_zero[8];
                                                                      };
       第一个成员:sin_family地址族(这个参数不使用网络字节序列,其他参数都是网络字节序列)
       第二个成员:sin_port指定要绑定的端口使用htons来转换成网络字节序列因为是无符号短整型
       第三个成员:in_addr的结构体用来存放地址in_addr的结构如下
                            struct in_addr {
                                 union {
                                       struct { u_char s_b1,s_b2,s_b3,s_b4; } S_un_b;
                                       struct { u_short s_w1,s_w2; } S_un_w;
                                        u_long S_addr;
                                        } S_un;
                                   };
                            可以看出in_addr是一个包含一个联合体的结构体,联合体可以用来存放不同类型的数据但只存放一个数据,根据选择不同而不同,我们的程序中选择的是长整型的变量S_addr来存放一个地址需用htonl来转换成为网络字节序;
l         htonl和htons区别是在于一个是将一个32位的主机字节序列转换成32位的TCP/IP的网络字节序一个则是16位
l         inet_addr的用处是将一个点分制的IP地址字符串转换为一个合适的   in_addr的变量。
l         inet_ntoa将一个网络地址转换为标准的点分式地址格式的字符串
3.         监听套接字:
       listen(socketSrc, 5); //listen用于将一个已绑定但未连接的套接字对象设定成监听模式等 到一个即将到来的连接
       第二个参数:表示等待连接的最大长度,如果参数被设置为SOMAXCONN将被设成一个最大的可能值
4.         接受连接:
       在一个被设置为监听的套接字上允许一个连接,并返回一个已连接的新的套接字
       SOCKET socketconn = accept(socketSrc, (SOCKADDR*)&addclient, &len);
       第一个参数:一个被设置为监听状态的套接字;
       第二个参数:一个SOCKADDR结构体用于保存请求连接的实体的地址,根据地址族的不同所创建的结构体不一样
       第三个参数:存储地址的长度,此参数在调用accept函数前必须初始化,否则会导致调用失败
5.         完成以上工作后通过recv和send函数来接收和发送数据
recv(socketconn, recvbuf, 100, 0); 
第一个参数是一个已连接的套接字
第二个参数是用来存储接收的数据的缓冲区地址
第三个参数表示缓冲区的大小
第四个参数指示接收的模式此处设为0
客户端的编写
6.         首先也是创建套接字
7.         然后在建立连接
       connect(sockclient, (SOCKADDR*)&addsrc, sizeof(SOCKADDR));
       第二个参数是要连接的地址,第三个参数则是地址的大小
 
UDP编程部分在简单的多线程聊天室的编写中详细说明
他是基于无连接的协议
所以编写服务器端时只要绑定了套接字后就可以开始传送和接受数据,而客户端则只需创建套接字就可以开始传送和接收
同过 recvfrom和sendto函数来操作
 
                     使用closesocket(m_socket);关闭一个套接字,使用WSACleanup();来释放套接字库

 

Ubuntu环境下rknn-toolkit2的安装与兼容性解析 本文详细解析了在Ubuntu系统上安装瑞芯微rknn-toolkit2工具链的完整流程与关键注意事项。文章重点剖析了rknn-toolkit2与旧版rknn-toolkit的核心兼容性问题,强调两者在API、模型格式及运行时库上互不兼容,并推荐使用Conda虚拟环境进行隔离管理,为RK3566、RK3588等开发板的AI模型部署提供清晰的实践指南。 阅读详情

相关推荐

GMSL Strapping Pins CFG0/CFG1 应用

如果 0x13.bit3 = 0, 则是链路没有 Locked,需要去排查下具体问题(通常是工作模式配置问题)如果遇到 Link 无法建立(Locked),电源没有问题的情况下,多半是加串器和解串器的工作模式不匹配。芯片在上电时,会检测这两个管脚的电压,根据不同的电压值,芯片进入到不同的工作模式。一对加串器和解串器,只要工作模式匹配得当,Link Locked,便能够正常工作。ADI 已经充分考虑了用户的需求,尽可能的降低的芯片的使用和配置复杂度。GMSL 的解串器也是类似的配置,具体请参考对应的规格书。

iStoneWalker的博客 1271

看孙鑫的VC 14课网络编程 自己总结的 呵呵

tcp udp 服务器:htonl(INADDR_ANY); tcp htonl bind listen send recv  udp          客户端:inet_addr("127.0.0.1");tcp connect recv/send          closesocket(); WSACleanup(); 记得加上 ws2_32.lib os

newmanlf的专栏 827

卡诺图化简法注意事项+竞争冒险知识点总结

今天反思以下卡诺图化简法中的注意事项。 卡诺图看起来简单,但如果不熟悉的话很容易出错,因此要对画圈的规则比较熟悉。

weixin_42415266的博客 1万+

初识TCP-----SOCKET编程(孙鑫的教程)

一服务器端程序:#include #include void main() { //加载套接字 WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested=MAKEWORD(1,1);//获得sokect版本号 err=WSAStartup(wVersionRequested,&wsaData);//加载套接字库 if (0!=err) {

halibobo520的专栏 1257

windows11系统封装教程

1、 现在电脑品牌各式各样,小白对电脑软件的安装存在较大的难题,今天笔者针对以上的问题做如下教程:windows11系统封装教程方式为视频方式。

cyz141001的博客 5882

【2025年华为秋招(AI)-11月19日-第二题(200分)- 终端款型聚类识别】(题目+思路+Java&C++&Python解析+在线测试)

该摘要总结了题目要求、输入输出格式、KMeans算法的实现步骤以及关键点。以下是150字内的摘要: 本文提出基于KMeans算法对终端型号进行聚类的方法。通过包间隔时长、连接持续时长、漫游前后信号强度4个特征,使用欧氏距离度量相似度。算法采用固定初始化策略(前k个样本作为初始质心),经过分配-更新迭代,直至质心移动小于1e-8或达到最大迭代次数。最终输出各簇样本数并按升序排列,解决了终端型号自动分类问题。示例显示该方法能有效识别3-4类终端,并准确统计每类数量。

m0_73659489的博客 141

孙鑫VC视频教程笔记之第十四课“基于TCP和UDP的Socket编程”

在OSI的各层所使用的协议: 1.应用层:telnet,FTP,HTTP,DNS,SMTP,POP3 2.传输层:TCP,UDP       TCP:面向连接的可靠的传输协议,通信前建立三次握手,握手成功后才能通信,对数据准确性要求较高的场合使用,如从网上载的安装文件,不能缺少任何信息       UDP:是无连接的,不可靠的传输协议,不需要建立连接,也没有重传和确认的机制,在实时性要求较

HAN Kai 2155

C# + YOLO 实时摄像头检测:Emgu CV + ONNX Runtime,30FPS+ 流畅运行

很多教程只给“单张图片推理”代码,一上摄像头就卡成 PPT(<5 FPS)。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 215

孙鑫 第十四课Socket编程之一 简介

1 Socket编程分为基于TCP的和基于UDP的TCP:面向连接的,可靠的传输,连接要经过三次握手,客户端在连接之前就得按照已知的服务器地址 端口进行连接,服务器端在等到客户端的连接后返回一个连接套接字,之后的信息发送接收就按这条连接进行,不需要再有地址信息。UDP:面向无连接的,不可靠的,不会进行重发,由于没有连接,因此每次发送都要指明对方的IP 端口,每次接收都要信息的同时要接收对方地址 端

cuihao0532的博客 658

ElectrolyteGPT:首个电池电解液逆向设计的生成式 AI 系统 —— 算法原理与复现解析

数据驱动的重要性:1100 万→100 万的精心筛选,比单纯增大模型更有效领域适配:fLine 表示法、正则分词、化学感知的数据增强(SMILES randomization)都是关键小模型的力量:6M 参数在特定化学空间的表现,远超通用大模型在相同任务上的零样本能力条件生成的极限:10 维条件导致模型崩溃,提示我们需要更好的条件编码策略(如 diffusion guidance、RLHF-style 偏好优化)未来方向配方实验验证。

ASKCOS博客 123

QGis二次开发 —— 1、win10/win11搭建Vs2017-QGis3.40.12环境(附Vs2017环境效果,附全部问题解决方法)(附:Qt助手加入QGis接口说明文档)

QGis二次开发 —— 1、Windows10搭建Vs2017-QGis环境(附Vs2017环境效果)(附:Qt助手加入QGisA接口说明文档)

1362

四路 CAN 转 4G 网关

SG‑CAN‑4G‑410 为**四路隔离 CAN 转 4G 工业网关**,把 CAN2.0A/B 报文封装成 TCP/UDP 报文,通过 4G 无线网络实现 CAN 总线远程监控、远程控制。四路 CAN 相互独立;以太网仅用于本地配置,不做业务数据传输;支持移动 / 联通 / 电信 4G 网络。

S2003120416的博客 166

库存管理系统项目部署方案(基于jdk8)

不需要安装到服务器,运维本地安装就行,主要是用来编译前端代码的。构建完成后将dist文件夹复制到服务器内。

程序员诚哥 2576

【计算机网络】断点续传是怎么做到的:从 Range 请求到分片上传的完整机制

断点续传在下载侧靠的是 HTTP 现成的 Range 协议,Content-Range 保证偏移对得上,If-Range 防止文件变更导致的错误拼接;上传侧没有标准,需要自己设计 init/part/complete 三段式交互,核心是让服务端记住“哪些块已经收下”,从而把失败粒度从整个文件降到单个分片。 这套机制可以迁移到任何长耗时操作的设计上。判断方法很简单:先问失败粒度是多少。如果一次操作失败就得从头再来,那它迟早会在生产环境里出问题——传输、批量导入、数据迁移、长事务,都是同一个道理。把大操作切成

2503_94545876的博客 541

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

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

【Linux网络】TCP 服务器并发处理多客户端:从 fork 分发到双重 fork 彻底消灭僵尸进程

拆解 TCP 服务器并发演进链:fork 分发连接、SIGCHLD 循环回收僵尸、双重 fork 交孙进程给 init 收养,并给出模型选型与线上排错对照。

2301_78967866的博客 429

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Linux 服务器性能排查手册(2026):CPU、内存、磁盘IO、网络四大瓶颈定位

iptables 四表五链模型、firewalld zone 信任级别、云安全组与主机防火墙的关系与优先级,避坑改了防火墙把自己挡在服务器外面的翻车事故。

2502_91473995的博客 328

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

AI 芯片片上网络 NoC 深度解析:flit、虚通道与拥塞控制如何决定 GPU/TPU/LPU 的算力利用率

AI芯片算力瓶颈不在FLOPS,而在片上网络(NoC)——数据搬运的能耗与延迟决定MFU上限。物理限制下,长线延迟不随工艺缩小,迫使NoC将全局布线拆为可流水的短链路;能量账显示,一跳传输耗能可达数十次乘加操作。拓扑选择直接影响性能:二维mesh虽布线可行,但均匀流量下每节点可用带宽按1/√N衰减,实测仅达标称值30%。虚通道、双网设计、静态调度(如Groq)等技术旨在突破此瓶颈。从总线到crossbar再到多跳NoC,本质是用延迟换可行性。未来趋势:专用通路(脉动阵列)、晶圆级集成(Cerebras)、跨

我的博客 94

台湾行情数据API接入教程

想用程序获取台股行情,很多人第一步会搜“台股资料 API 推荐”,结果发现选择不少:证交所有免费接口,Yahoo Finance 也能查,券商还有自己的 API。真正写代码时才发现,有的数据只到收盘,有的延迟 20 分钟,有的必须先开户。本文先梳理台湾行情数据的几种获取渠道,再用 Python 从零搭一个可以运行的台股数据脚本:查代码清单、取实时报价和盘口、拉历史K线、做复权、用 WebSocket 接收实时推送,最后结合台积电 ADR 和新台币汇率计算跨市场溢价。

qq_34102871的博客 308

【基于 WebSocket 的多用户网页五子棋】—— 数据管理模块

但行好事,莫问前程

qq_42996461的博客 221

Qt网络编程实战指南:从底层Socket到现代异步架构的选型与避坑

本文梳理Qt网络编程的核心模块与演进路线,对比QTcpSocket与QNetworkAccessManager的使用边界,结合HTTP请求与TCP长连接的完整示例,说明信号槽、内存管理与事件循环的配合方式。重点记录连接池设计、证书校验、线程亲和性等实际开发中的关键决策点,帮助读者在C/S或跨平台项目中建立稳定的网络层基座。

2402_83344867的博客 299

从母钟到子钟:NTP 网络时钟系统架构与软件接口

本文从工程角度简要介绍公共场所的时间同步需求、NTP协议的定位,以及典型LED同步时钟的系统架构与硬件设计,以讯鹏科技4寸与5寸同步时钟为例。

SPZHCS的博客 164

DPVS 报文黑匣子与 Crash 自动拉黑:给转发面装上“飞行记录仪“

谁打挂了我(crash dump)、他之前发了什么(慢路径环)、他还会再来(入口拉黑)。设计上我们始终坚持两条原则:记录与决策分离(黑匣子永远只说不做),以及误伤成本优先于漏放成本(三道闸门全部通过才拉黑,expire 到期自动解封)。性能上,全量快路径摘要 + 入口查表的综合开销低于 1.3%,在 FIP 网关的流量水位下不可感知。飞行记录仪的价值不在于飞机正常飞行的时候,而在于它让每一次事故都变成一次改进。对转发面来说,同样如此。

zyun360的博客 272

全球实时竞价 RTB 中 IP 定位数据应用:链路完整性与工程实践

全球实时竞价(RTB)中IP定位数据的应用,核心判断是:IP数据是RTB竞价决策的底层输入之一,但它的价值高度依赖于从IP捕获到OpenRTB序列化整条链路的完整性。大量定位误差并非源于IP库本身不准,而是发生在CDN边缘节点捕获了错误的IP、供应链各环节使用了不同版本的库、或者OpenRTB字段缺失导致买方无法判断数据可信度。对于DSP和SSP的工程团队而言,理解IP定位在RTB中的实际作用边界,比选一个更准的库更重要。

ITxiaobing2023的博客 258

HTTP、SSE、WebSocket、Socket.IO:实时通信方案深度对比与选型指南

HTTP 是基础,是整个 Web 的底座;SSE 是单向推送的轻量最优解;WebSocket 是高性能双向实时通信的底层标准;Socket.IO 是一套降低开发门槛、抹平环境差异的上层框架。技术选型永远不是“哪个技术更酷”,而是匹配业务的实时性、交互方向、网络环境、团队维护成本。简单需求优先轻方案,复杂双向实时再上 WebSocket;如果追求快速落地、兼容各种奇葩网络,Socket.IO 是很好的选择。

changshuaihua001的博客 349

HART转Modbus TCP利用月度维护窗口减少中药产线停机时长

中药制药洁净车间原用HART仪表因仅传输4-20mA信号,诊断信息无法上传,导致GMP审计难、运维频繁进出洁净区。项目采用捷米特JM-TCP-HART协议转换网关,将HART数字信号转为ModbusTCP以太网数据,实现仪表状态、标定记录等信息远程采集与追溯。改造不改动原有控制逻辑,无需停机,保障生产连续性,满足洁净区安全与合规要求,验证了协议转换在存量设备升级中的高效可行性。

weixin_66215183的博客 212

Linux网络编程:TCP多线程远程命令执行与线程池改造

前面已经实现了 TCP Echo Server,并且通过多进程和多线程解决了多个客户端连接的问题。不过目前服务器的业务还是比较简单,客户端发送什么,服务器就返回什么。这次在原来的多线程服务器上继续做一些改动,实现一个简单的远程命令执行功能。这次主要学习了两个内容。第一个是多线程远程命令执行。通过 Command 类封装命令的接收、检查、执行和结果返回,并使用 set 对允许执行的命令进行限制。第二个是线程池版本的 TCP Echo Server。通过和std::bind。

2501_93388101的博客 370
下一篇: VC6下实现透明对话框!
WowBanyan
博客等级 码龄18年 5粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值