
C/C++网络编程专题
文章平均质量分 64
专攻Linux Windows系统下C、C++网络编程开发,精品核心知识点、彻底掌握网络编程!
优惠券已抵扣
余额抵扣
还需支付
¥9.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
程序员乐逍遥
15年C/C++跨平台开发资深程序员、想跟我学编程的可以观看我精心录制的视频课程!
展开
-
Windows Linux下查看静态库,动态库各种命令的总结
【代码】Windows Linux下查看静态库,动态库各种命令的总结。原创 2024-06-05 17:24:17 · 372 阅读 · 0 评论 -
Windows下 VS2022 编译OpenSSL 库
(Transport Layer Security,安全传输层),TLS是建立在传输层TCP协议之上的协议,服务于应用层,它的前身是SSL(Secure Socket Layer,安全套接字层),它实现了将应用层的报文进行加密后再交由TCP进行传输的功能。作为一个基于密码学的安全开发包,OpenSSL提供的功能相当强大和全面,囊括了主要的密码算法、常用的密钥和证书封装管理功能以及SSL协议,并提供了丰富的应用程序供测试或其它目的使用。目前的 SSL 证书许可,下发的其实都是 SSL/TLS 证书。原创 2024-01-20 16:35:44 · 1216 阅读 · 0 评论 -
开源世界许可证Copyleft GPL LGPL MIT BSD Apache
在延伸的代码中(修改和有源代码衍生的代码中)需要带有原来代码中的协议,商标,专利声明和其他原来作者规定需要包含的说明;需要注意的是,LGPL 许可的软件可以自由使用和分发,但在对 LGPL 许可的库进行修改或创作派生工作时,必须遵循 LGPL 许可的要求,并在满足相应的许可证要求的前提下,享受 LGPL 许可带来的灵活性和自由。非共享库链接:如果将 LGPL 许可的库静态链接到应用程序中(即将库的代码直接包含在应用程序中),那么应用程序的整个源代码必须遵循 LGPL 许可的要求,并开放源代码。原创 2024-01-16 20:16:42 · 482 阅读 · 0 评论 -
_variant_t 中的 SAFEARRAY的SafeArrayGetElement获取不到值的情况
初始化 VARIANTARG (或 VARIANT) 类型的新局部变量。最近,使用SAFEARRAY 获取二维数组的值,发生了一个很诡异的情况!它需要初始化这样的一个变量。不然你去获取就是各种值不对,真坑啊!字段设置为 VT_EMPTY 来初始化 VARIANTARG。但是如果你是一个BSTR的数组,这里字符串就不行了,获取的是乱码!不同,此函数不解释 VARIANTARG 的当前内容。这里获取 long 、double 是没有问题的。这个时候才发现没问题了!大家这里注意到没有,原创 2023-11-16 15:28:02 · 267 阅读 · 0 评论 -
Windows 根据dll生成 lib文件
查看c.lib中包含哪些函数,可以使用:dumpbin /all /rawdata:none XXX.lib >3.txt。查看a.dll库中包含哪些函数,可以使用: dumpbin /exports XXX.dll >1.txt。查看d.obj中包含哪些函数,可以使用:dumpbin /all /rawdata:none XXX.obj。如果函数较多,可以复制VS的报错信息,放到一个文件中,使用Python来解析出函数名。第一步,查看一下大概的函数,确认dll有你想要的函数。原创 2023-11-09 17:03:51 · 535 阅读 · 0 评论 -
解决Ubuntu系统字体太小的问题
这里可以将缩放比例调大,整个字体就放大了!在终端输入下面的命令。原创 2023-10-07 09:10:36 · 2054 阅读 · 4 评论 -
解决Ubuntu18.04安装好搜狗输入法后无法打出中文的问题
在ubuntu中设置中文输入法原创 2023-10-07 08:58:38 · 4249 阅读 · 3 评论 -
Unix System V BSD POSIX 究竟是什么?
其正式称呼为IEEE 1003。在这套标准下,开发的程序可以只需要最小的修改或不需要修改就能在不同的操作系统平台上运行。POSIX.1 已经被国际标准化组织(International Standards Organization,ISO)所接受,被命名为 ISO/IEC 9945-1:1990 标准。POSIX 标准在推出后,得到了广泛的采纳。原创 2023-09-01 15:35:20 · 862 阅读 · 0 评论 -
Linux下两个必学的查找命令find grep
【代码】Linux下两个必学的查找命令find grep。原创 2023-08-23 16:05:41 · 284 阅读 · 0 评论 -
Centos 解决 XXX不在 sudoers 文件中。此事将被报告。的错误
本来想使用 sudo 拷贝一个文件,结果出现上面的问题!将你需要添加的用户,模仿root写一遍,然后保存!然后执行 exit 退出root用户!首先登录root,然后执行下面的命令。再次使用sudo ,发现成功啦!原创 2023-08-22 16:14:06 · 2007 阅读 · 0 评论 -
Linux下grep通配容易混淆的地方
我希望找到某个版本为8的一个libXXX.8XXX.so ,那么应该怎么写呢?终于过滤到自己想要的文件了!是不是结果出乎你的意料之外?原创 2023-08-12 22:58:11 · 583 阅读 · 0 评论 -
Linux下查阅帮助文档必学命令 man
Linux操作系统的使用中,我们经常会遇到很多问题,这个时候查询文档的能力至关重要,黄老师来推荐大家使用man,这时我们必须掌握的查阅能力:最常用的命令: 这里的数字分别代表:回车键 1g跳到头部第一行n:跳到N行。原创 2023-08-01 14:45:36 · 232 阅读 · 0 评论 -
select模型,poll模型,epoll模型对比
select模型,poll模型,epoll模型对比 select poll epoll支持最大连接数 1024 无上限 无上限IO效率 每次调用都要进行遍历,时间复杂度O(n) 每次调用都要进行遍历,时间复杂度O(n) 使用事件通知方式,每当fd就绪,系统注册的回调函数就会被调用,将就绪fd放到rdllist里面,这样epoll_wait返回的时候我们就拿到了就绪的fd,时间复杂度O(1)fd拷贝 每次select都拷贝,fd数组 ......原创 2022-08-01 22:41:08 · 186 阅读 · 0 评论 -
Linux下使用nc命令测试TCP、UDP
nc是一个简单、可靠的网络测试工具!参数 参数说明-4 Use IPv4 only-6 Use IPv6 only-U, --unixsock 仅使用Unix域套接字-C, --crlf 将crlf用于EOL序列-c, --sh-exec 通过/bin/sh执行给定的命令-e, --exec 执行给定的命令–lua-exec 执行给定的lua脚本-g hop1[,hop2,…] ...原创 2022-06-06 10:47:10 · 7054 阅读 · 2 评论 -
linux下 IO 阻塞 非阻塞
1.区分堵塞、非堵塞在一个IO操作过程中,以read为例,会涉及到两个过程:1.等待数据准备好;2.将数据从内核拷贝到进程中这两个阶段是否发生阻塞,将产生不同的效果。堵塞IO:进程在请求read阻塞io的数据时,操作需要彻底完成后才返回到用户空间非堵塞IO:进程在步骤1不堵塞,如果数据没准备好,read(io操作)函数会立即返回一个状态值反馈给进程,所以对于非阻塞io,可以用一...原创 2019-09-24 17:54:10 · 416 阅读 · 0 评论 -
Linux五种IO模型性能分析
1. 概念理解 在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式:同步: 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。也就是必须一件一件事做,等前一件做完了才能做下一件事。例如普通B/S模式(同步):提交请求->等待服务器处理->处理转载 2017-07-26 17:56:05 · 1437 阅读 · 0 评论 -
IO多路复用的三种机制Select,Poll,Epoll
I/O多路复用(multiplexing)的本质是通过一种机制(系统内核缓冲I/O数据),让单个进程可以监视多个文件描述符,一旦某个描述符就绪(一般是读就绪或写就绪),能够通知程序进行相应的读写操作select、poll 和 epoll 都是 Linux API 提供的 IO 复用方式。相信大家都了解了Unix五种IO模型,不了解的可以 =>查看这里[1] blocking I...原创 2019-09-24 17:21:27 · 441 阅读 · 0 评论 -
Linux 下Epoll模型
一、 介绍Epoll 是一种高效的管理socket的模型,相对于select和poll来说具有更高的效率和易用性。传统的select以及poll的效率会因为 socket数量的线形递增而导致呈二次乃至三次方的下降,而epoll的性能不会随socket数量增加而下降。标准的linux-2.4.20内核不支持epoll,需要打patch。本文主要从linux-2.4.32和linux-2.6.10原创 2017-07-27 18:02:24 · 1146 阅读 · 0 评论 -
5种IO模型
在早期的文章《unix IO模型》中我们介绍了5种IO模型,如下图是几种IO模型的对比几种IO模型的对比从上面的图可以看出,从左到右,越往后,阻塞越少,理论上效率也就越优。其中Select对应的是第三种IO模型:I/O Multiplexing IO多路复用模型,而epoll与kqueue其实和Select一样也属于I/O Multiplexing IO多路复用模型,只是相比于se...原创 2019-10-31 17:13:27 · 326 阅读 · 0 评论 -
我读过的最好的epoll讲解--转自”知乎“
首先我们来定义流的概念,一个流可以是文件,socket,pipe等等可以进行I/O操作的内核对象。 不管是文件,还是套接字,还是管道,我们都可以把他们看作流。 之后我们来讨论I/O的操作,通过read,我们可以从流中读入数据;通过write,我们可以往流写入数据。现在假定一个情形,我们需要从流中读数据,但是流中还没有数据,(典型的例子为,客户端要从socket...转载 2018-12-25 19:46:51 · 302 阅读 · 0 评论 -
epoll ET模式的demo
#include <stdio.h>#include <sys/epoll.h>#include <sys/socket.h>#include <sys/types.h>#include <netinet/in.h>#include <arpa/inet.h>#include <fcntl.h>#i...原创 2019-09-24 17:48:55 · 454 阅读 · 0 评论 -
Select、Poll与Epoll 的比较
1 Select、Poll与Epoll简介Selectselect本质上是通过设置或者检查存放fd标志位的数据结构来进行下一步处理。如果有事件发生,select会将临时结果写到用户空间并返回;当轮询一遍后没有任何事件发生时,如果指定了超时时间,则select会睡眠到超时,睡眠结束后再进行一次轮询,并将临时结果写到用户空间,然后返回。sel原创 2017-07-28 10:59:21 · 652 阅读 · 0 评论 -
I/O多路复用:select poll epoll
关于I/O多路复用:I/O多路复用(又被称为“事件驱动”),首先要理解的是,操作系统为你提供了一个功能,当你的某个socket可读或者可写的时候,它可以给你一个通知。这样当配合非阻塞的socket使用时,只有当系统通知我哪个描述符可读了,我才去执行read操作,可以保证每次read都能读到有效数据而不做纯返回-1和EAGAIN的无用功。写操作类似。操作系统的这个功能通过select/pol转载 2017-07-28 10:07:22 · 543 阅读 · 0 评论 -
Linux 下 poll模型
poll调用和select调用实现的功能一样,都是网络IO利用的一种机制。poll() 没有像 select() 构建 fd_set 结构体的 3 个数组 ( 针对每个条件分别有一个数组 : 可读性、可写性和错误条件 ) ,然后检查从 0 到 nfds 每个文件描述符。先看一下poll的调用形式一,poll调用[cpp] view plain c原创 2017-07-27 17:06:11 · 1193 阅读 · 0 评论 -
TCP网络状态变换时序图
关于TCP网络编程,大家一定要有以下的图:原创 2019-09-26 14:53:49 · 703 阅读 · 0 评论 -
NAT 内网穿透原理
1. NAT简介NAT(Network Address Translation,网络地址转换)是一种广泛应用的解决IP短缺的有效方法,NAT将内网地址转和端口号换成合法的公网地址和端口号,建立一个会话,与公网主机进行通信。1.1. NAT分类NAT从表面上看有三种类型:静态NAT、动态地址NAT、地址端口转换NAPT。 (1)静态NAT:静态地址转换将内部私网地址与合法公网地址进行一对一的转换,且每个内部地址的转换都是确定的。(2)动态NA...原创 2021-10-09 17:12:50 · 449 阅读 · 0 评论 -
TCP的四次挥手为什么需要2MSL ?
众所周知,TCP建立连接三次握手,断开连接四次挥手,具体流程如下:MSL是什么意思?MSL, the maximum segment lifetime (最长报文段寿命) 。 segment可以在网络中存活的最长时间,超过这个时间会被丢弃。这个时间限制是有界限的,TCP Segment通过IP datagrams进行传输,IP datagrams使用ttl属性来定义这个时间。R...原创 2019-09-27 10:16:57 · 3908 阅读 · 0 评论 -
水平触发LT、边缘触发ET
Level_triggered(水平触发 LT):当被监控的文件描述符上有可读写事件发生时,epoll_wait()会通知处理程序去读写。如果这次没有把数据一次性全部读写完(如读写缓冲区太小),那么下次调用 epoll_wait()时,它还会通知你在上没读写完的文件描述符上继续读写,当然如果你一直不去读写,它会一直通知你!!!如果系统中有大量你不需要读写的就绪文件描述符,而它们每次都会返回,这样会转载 2017-07-28 11:19:17 · 1184 阅读 · 0 评论 -
Linux 下select 模型
系统提供select函数来实现多路复用输入/输出模型。select系统调用是用来让我们的程序监视多个文件句柄的状态变化的。程序会停在select这里等待,直到被监视的文件句柄有一个或多个发生了状态改变。函数原型:int select(int maxfd,fd_set *rdset,fd_set *wrset, fd_set *exset,struct ti原创 2017-07-27 15:05:40 · 1268 阅读 · 0 评论 -
linux和windows下用setsockopt设置SO_SNDTIMEO,SO_RCVTIMEO的参数的一点区别
UDP的socket在某些情况:如对方关闭时,本地可能sendto不出去数据,然后recvfrom就会被阻塞,这时就需要设置 这两个参数的值提高程序质量。linux: struct timeval timeout={3,0};//3s int ret=setsockopt(sock_fd,SOL_SOCKET,SO_SNDTIMEO,&timeout,sizeof(tim...转载 2019-01-24 16:31:53 · 2547 阅读 · 0 评论 -
I/O - 同步,异步,阻塞,非阻塞
同步(synchronous) IO , 异步(asynchronous) IO, 阻塞(blocking) IO , 非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出的答案都可能不同,比如wiki,就认为asynchronous IO和non-blocking IO是一个东西。这其实是因为不同的人的知识背景不同转载 2017-07-19 14:47:23 · 1591 阅读 · 0 评论 -
大端Big-Endian 、小端Little-Endian
Big-Endian和Little-Endian的定义如下: 举一个例子,比如数字0x12 34 56 78在内存中的表示形式为:1)大端模式: 高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。低地址 -----------------> 高地址0x12 | 0x34 | 0x56 | 0x782)小端模式:高位字节排放在原创 2017-08-03 10:58:06 · 606 阅读 · 0 评论 -
recv函数返回值总结
函数原型:int recv( SOCKET s, char *buf, int len, int flags)功能:不论是客户还是服务器应用程序都用recv函数从TCP连接的另一端接收数据。参数一:指定接收端套接字描述符;参数二:指明一个缓冲区,该缓冲区用来存放recv函数接收到的数据;参数三:指明buf的长度;参数四 :一般置为0。原创 2017-07-25 16:13:44 · 16922 阅读 · 0 评论 -
wireshark抓包图解 TCP三次握手/四次挥手详解
Wireshark简介更多有关Wireshark的教程、软件下载等,请见:http://www.52im.net/thread-259-1-1.html,本文只作简要介绍。1Wireshark 是什么?Wireshark 是最著名的网络通讯抓包分析工具。功能十分强大,可以截取各种网络封包,显示网络封包的详细信息。你可以把网络包分析工具当成是一种用转载 2017-07-31 17:40:59 · 3385 阅读 · 0 评论 -
TCP send函数会阻塞吗?
很多学员在使用send函数的时候,发现send总是能正常返回,看起来好像是“非阻塞”,其实它是阻塞的,以下代码为证:服务端: #include <stdio.h>#include <winsock2.h> #pragma comment(lib, "ws2_32.lib") int main(){ WORD wVersionRequested...原创 2018-07-18 13:43:49 · 5081 阅读 · 0 评论 -
OSI七层网络模型 TCP/IP 三次握手 四次挥手
1、概念 Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议,又名网络通讯协议,是Internet最基本的协议、Internet国际互联网络的基础,由网络层的IP协议和传输层的TCP协议组成。TCP/IP 定义了电子设备如何连入因特网,以及数据如何在它们之间传输的标准。协议采用了4层的层级结原创 2017-07-06 15:48:37 · 950 阅读 · 0 评论 -
C++网络编程进阶-黄强-专题视频课程
C/S模型在企业级的软件开发中非常常见,高并发网络通讯更是很多项目的核心模块,学好socket 网络编程显得尤为重要,本课程分为TCP/IP 协议、socket基础与进阶的异步通讯模型三个部分,通过浅显易懂的代码与讲解,让你的C++网络编程能力得到质的飞跃,具备开发高并发服务器的能力!...原创 2017-09-20 18:16:29 · 814 阅读 · 0 评论 -
UDP服务器也可以使用connect()
UDP是一个无连接的协议,因此socket函数connect()似乎对UDP是没有意义的,然而事实不是这样。 一个插口有几个属性,其中包括协议,本地地址/端口,目的地址/端口。 对于UDP来说: socket()函数建立一个插口; bind()函数指明了本地地址/端口(包括ADDR_ANY, 通配所有本地网络接口); con转载 2018-01-20 15:22:05 · 1060 阅读 · 0 评论 -
UDP 服务端与客户端均可以bind()绑定端口, 并且可以使用connect()链接后,使用send()与recv()方法!
测试发现: UDP 服务端与客户端均可以bind()绑定端口,一般使用recvfrom()与sendto() , 但使用connect()链接后,也可以使用send()与recv()方法!UDP服务端#include#include #include #pragma comment(lib, "Ws2_32.lib")int main(){ WSADATA wsaDat原创 2018-01-22 11:57:30 · 3673 阅读 · 0 评论 -
windows 下 IOCP模型(完成端口)
IOCP(I/O Completion Port,I/O完成端口)是性能最好的一种I/O模型。它是应用程序使用线程池处理异步I/O请求的一种机制。在处理多个并发的异步I/O请求时,以往的模型都是在接收请求是创建一个线程来应答请求,这样就有很多的线程并行地运行在系统中 ,Windows内核花费大量的时间在进行线程的上下文切换,并没有多少时间花在线程运行上。再加上创建新线程的开销比较大,所以造成了效率转载 2017-08-01 10:44:22 · 2436 阅读 · 6 评论