![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
网络
文章平均质量分 78
tomwillow
这个作者很懒,什么都没留下…
展开
-
原生socket使用ICMP协议实现ping单个或多个目标时发生窜包的解决方法
问题描述原生socket使用ICMP协议实现ping功能,网上代码很多了,我参考的是这本:王艳平,张越.Windows网络与通信程序设计[M].北京人民邮电出版社,2006。代码逻辑也很清晰,先构造ICMP包,把当前时间填入timestamp字段,调用sendto发到指定IP,再调用recvfrom接收,然后用当前时间减去接收到的包的timestamp字段,得到ping的时间。例子里只发了4个包,没有问题。网络通畅时,也没有问题。我改了下代码,循环向多个ip轮流发包,然后接收。问题就出现了。pin原创 2021-06-24 11:54:00 · 1857 阅读 · 2 评论 -
VS C++实现openssl访问https网页教程及实例
之前我实现了访问 http 网页,以及解析大小字段实现网页的完整读取。但现在很多网站都是 https 了,而 https 在 TCP 和 IP 层中间加了一个 SSL 或者 TLS 协议,相当地麻烦,还涉及到公钥加密等,徒手搓相当不现实。C++也是这点缺点,调库很麻烦。不像 python,直接 import urllib,urlopen就可以直接开 https 的网页。本文使用 openssl库 来实现 https 网页的访问。因为我在 openssl库的使用中踩了很多坑,所以我会尽量把我踩的坑都说清楚原创 2020-07-08 20:59:06 · 3616 阅读 · 1 评论 -
通过识别Content-Length和Transfer-Encoding实现C++ socket正确接收HTTP数据
众所周知,HTTP在运输层是TCP协议,所以在socket编程中,一般是初始化socket,解析ip,connect,send,recv的步骤。send请求头倒是容易,但在recv时就会发生问题。recv需要传入一个接收大小,但在HTTP协议中,头部并没有包大小,所以这个大小一般作为缓冲区大小使用,例如传入1024 bytes这种。HTTP丢包的问题首先我以为通过判断recv返回值,可以得知包是否接收完全,但实践发现,这种方式会产生丢包。例如,包大小实际是2000 B,在第一次recv时,接收到了1原创 2020-06-29 20:14:17 · 1167 阅读 · 0 评论