- 博客(54)
- 资源 (1)
- 问答 (5)
- 收藏
- 关注
原创 chrome85及其85以上版本更新
前一段时间有用户使用chrome进行webrtc通信失败,查看服务日志发现是dtls握手失败。在本地尝试复现的时候发现和chrome版本有关系。继续抓包定位,发现实在dtls握手第二部的时候失败的,客户端校验失败,当时初步判断和服务没有关系,应该是浏览器的原因,当时看最新版chrome的更新日志发现有关于webrtc的安全更新,但是修复的bug详情看不到,然并卵,浏览器不受控,而且看腾讯和声网的webrtc都可以正常使用,所以必须得解决,最后经过不断的google和尝试,发现将服务端和浏览器建立媒体连接时下
2020-11-04 23:23:44 983 2
原创 centos 下编译licode
原生licode只支持ubuntu,而自己经常使用centos因此想要在cent下编译licode。写篇博客记录下遇到的问题。期间也查看了搜索了各种帖子以及博客发现,大家在centos下编译碰到的问题都不全一样,想来也可以理解,licode版本,操作系统版本不一样的话都可能导致不同的问题,下面是我的操作系统版本以及我遇到的问题(问题主要是erizo模块) 。LSB Version: :core-4.1-amd64:core-4.1-noarch:cxx-4.1-amd64:cxx-4.1-noarch:
2020-06-22 00:41:13 608
原创 wireshake分析stun协议
不知道为什么,我用wireshake过滤stun协议过滤不出来,抓包发现解析出来的和3478端口交互的都是udp的数据,弄个半天没弄好,想着udp就udp吧,反正是为了学习,顺道写篇博客记录一下。过滤掉UDP包头后,前两位是0,对应stun协议的前两位,前两个字节整体为0x0001 是bind request请求这两个字节为0,说明这个请求的消息只有头部,没有body,没错。这一段,前面4字节是cookie,后面 Transaction Id 记录下就行,和响应等会对比下这个是从3478发往本
2020-05-20 02:47:38 2770
原创 html 控件隐藏和radio不可选状态
Html 控件的隐藏 1 隐藏并且不占据的位置document.getElementById('myVideo').style.display = "none”;//隐藏document.getElementById('myVideo').style.display = “block”;//显示2 隐藏但是仍占据的位置document.getElementById(Id).style.v...
2018-12-28 11:36:43 3284
原创 Mac安装Licode(错误总结)
安装licode 失败期间碰到各种各样问题,建议在纯净的环境下安装,要不然总是碰到这种各样的问题,最后两次尝试在纯净的ubuntu 14.04 和Mac(不清楚版本)安装都成功了,并且问题较少,下面写一下安装中记录的一部分问题: 遇到问题:sudo chown -R hostname(自己的主机名) /usr/local/ 没有权限 解决办法:Mac系统root用户没有权限修改/usr...
2018-12-28 11:24:15 971
原创 boost::asio::io_service
最近在学习licode发现源码有使用到boost::asio::io_service,因此在网上找文章了解一下,顺便写篇博客记录io_service 负责和操作系统打交道,等待所有异步操作的结束,然后为每一个异步操作调用其完成处理程序。例子(我们有3个异步操作,2个socket连接操作和一个计时器等待操作):有一个io_service实例和一个处理线程的单线程例子:io_service ...
2018-12-19 17:20:18 2805 4
转载 STL list::sort()
template <class T, class Alloc>template <class T, class Alloc>void list<T, Alloc>::sort(){if (node->next == node || link_type(node->next)->next == node)return;list<...
2018-07-31 11:47:26 109
转载 STL源码分析之hash表(gnu-c++ 2.9)
1、基本概念 关于hash表的概念这里就不再多说,hash表的变化一般都在哈希函数和退避方法上。STL采用的是开链法,即每个hash桶里面维持一个链表,hash函数计算出位置后,就将节点插入该位置的链表上,因此,底层实现为hash表的容器,迭代器的实现都类似于deque,不仅要维持在链表上移动还得实现在到达一条链表的末端时候,下次移动可以进入到下一个hash桶里面的链表。 2、 STL哈希表结...
2018-07-31 11:30:20 908
转载 STL空间配置器
STL六大组件及关系: 图片来源:博览网空间配置器:内存池实现小块内存分配,对应到设计模式–单例模式(工具类,提供服务,一个程序只需要一个空间配置器即可),享元模式(小块内存统一由内存池进行管理)迭代器:迭代器模式,模板方法容器:STL的核心之一,其他组件围绕容器进行工作:迭代器提供访问方式,空间配置器提供容器内存分配,算法对容器中数据进行处理,仿函数伪算法提供具体的策略,类型萃取...
2018-07-31 10:40:59 181
转载 版本管理工具介绍—Git
[版本管理工具介绍—Git篇] (https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000) 好文
2018-06-19 10:58:17 237
转载 快速幂取模算法详解
1.大数模幂运算的缺陷: 快速幂取模算法的引入是从大数的小数取模的朴素算法的局限性所提出的,在朴素的方法中我们计算一个数比如5^1003%31是非常消耗我们的计算资源的,在整个计算过程中最麻烦的就是我们的5^1003这个过程 缺点1:在我们在之后计算指数的过程中,计算的数字不都拿得增大,非常的占用我们的计算资源(主要是时间,还有空间) 缺点2:我们计算的中间过程数字大的恐怖,我们现有的计算机...
2018-05-28 20:24:28 4626
转载 RSA算法详解及C语言实现
1、什么是RSA RSA公钥加密算法是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。1987年首次公布,当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏开头字母拼在一起组成的。 RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的绝大多数密码攻击,已被ISO推荐为公钥数...
2018-05-28 18:53:31 100127 22
原创 关于ios::sync_with_stdio(false);和 cin.tie(0)加速c++输入输出流
在网上查看别人的ACM代码时,发现别人输入输出语句用的总是scanf与printf,有点不解,还以为他们用的都是C语言,而非C++,但今天做的一道题(Sort):发现与网上的其他高手使用完全相同的方法,使用scanf及printf的代码提交后Accepted,而使用cin及cout的却Time Limit Exceeded,代码如下:代码一(Accepted):#include&lt;...
2018-05-26 18:16:02 4592
转载 (转载)stl中list的sort算法实现
https://blog.csdn.net/qq276592716/article/details/7932483list不能使用STL算法sort(),必须使用自己的sort()member functiion,因为STL算法sort()只接受Ramdon Access Iterator.template <class _Tp, class _Alloc> void li...
2018-05-03 18:42:58 428
转载 深度理解select、poll和epoll
原文:http://blog.csdn.net/davidsguo008/article/details/73556811
2018-03-18 22:31:05 182
转载 TCP为什么是三次握手,为什么不是两次或者四次 && TCP四次挥手
http://www.cnblogs.com/zhuzhenwei918/p/7465467.html讲得很好
2018-03-18 10:36:26 203
原创 插入排序
有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法——插入排序法,插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元...
2018-03-06 22:42:10 156
原创 选择排序
思想:选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法(比如序列[5, 5, 3]第一次就将第一个[5]与[3]交换,导致第一个5挪动到第二个5后面)。void swap(int*a,int*b){ int temp;...
2018-03-06 22:07:24 178
原创 错误信息:Cannot jump from switch statement to this case
用switch case出现了一个错误,cannot jump from switch statement to this case…. 查阅资料发现,是因为switch case 中是不能定义对象的,因为只要是在大括号内定义的对象,定义对象的地方要用{}包括...
2018-03-02 11:30:12 970
转载 inotify
转载自:http://blog.csdn.net/longwang155069/article/details/54016789 http://blog.csdn.net/shreck66/article/details/46974155 Inotify是一个Linux特性,它监控文件系统操作,比如读取、写入和创建。Inotify反应灵敏,用法非常简单,并且比cron任务的繁忙...
2018-02-28 06:33:38 212
转载 pthread_join和pthread_detach
转载自:http://blog.csdn.net/u014774781/article/details/48039441 在任何一个时间点上,线程是可结合的(joinable)或者是分离的(detached)。一个可结合的线程能够被其他线程收回其资源和杀死。在被其他线程回收之前,它的存储器资源(例如栈)是不释放的。相反,一个分离的线程是不能被其他线程回收或杀死的,它的存储器资源在它终止时由系统自...
2018-02-25 15:37:40 152
原创 daemon的用法
#include <unistd.h> int daemon(int nochdir, int noclose);daemon()函数适用于希望从控制终端脱离并作为系统守护进程在后台运行的程序。 如果nochdir为零,daemon()将进程的当前工作目录更改为根目录(“/”); 否则,当前工作目录保持不变。 如果noclose为零,daemon()将标准输入,标准输出和...
2018-02-22 15:49:21 4045
原创 TCP协议
TCP的特点是面向连接、字节流、一对一和可靠传输。 当发送端应用程序连续执行多次写操作时,TCP模块先将这些数据放入TCP发送缓冲区中,当TCP模块真正开始发送数据时,发送缓冲区中这些等待发送的数据可能被封装成一个或多个TCP报文段发出。因此,TCP模块发送出的TCP报文段的个数和应用程序执行的写操作次数之间没有固定的数量关系。 当接收端收到一个或多个TCP报文段后,TCP模块将它们携带的应用
2018-02-06 21:07:35 515
原创 IPv6头部结构
IPv6不仅解决了IPv4地址不够用的问题,还做了很大改进。比如:增加了多播和流的功能,为网络上媒体内容的质量提供精细的控制;引入自动配置功能,使得局域网管理更方便;增加了专门的网络安全功能等。IPv6固定头部结构 IPv6头部由40字节的固定头部和可变长的扩展头部。 4位版本号指定IP协议的版本。对于IPv6来说,其值是6。8位通信类型指示数据流通信类型或优先级,和IPv4中的TO
2018-02-06 11:38:00 4037
原创 IP转发
对于允许IP数据报转发的系统(主机或路由器),数据报转发子模块将对期望转发的数据报执行如下操作: 1)检查数据报头部的TTL值,如果TTL值已经是0,则丢弃该数据报 2)查看数据报头部的严格源路由选择选项,如果该选项被设置,则检测数据报的目标IP地址是否是本机的某个IP地址,如果不是,则发送一个ICMP源站选路失败报文给发送端。 3)如果有必要,则给源端发送一个ICMP重定向报文,以告诉它一
2018-02-06 10:54:13 329
原创 IP路由
IP协议的一个核心任务是数据报的路由, 即决定发送数据报到目标机器的路径。 IP模块基本工作流程: 当IP模块接收到来自数据链路层的IP数据报时,它首先对该数据报的头部做CRC校验,确认无误之后分析其头部的具体信息。如果该数据报的头部设置了源站选路选项(松散源路由选择或严格源路由选择),则IP模块调用数据报转发子模块来处理该数据报,如果该IP数据报的头部中目标IP地址是本机的某个I
2018-02-05 12:16:16 358
原创 IP分片
当IP数据报的长度超过帧的MTU时,它将被分片传输。分片可能发生在发送端,也可能发生在中转路由器上,而且可能在传输过程中被多次分片,但只有在最终的目标机器上,这些分片才会被内核中的IP模块重新组装。 IP头部中的数据报标识、标志和片偏移给IP的分片和重组提供了足够的信息。一个IP数据报的每个分片都具有自己的IP头部,它们具有相同的标识值,但是具有不同的片偏移。并且除了最后一个分片外,其他分片都将
2018-02-04 22:17:40 400
原创 IP协议
IP协议是TCP/IP协议族的核心协议,也是socket网络编程的基础之一。IP头部信息。IP头部信息出现在每个IP数据报中,用于指定IP通信的源端IP地址、目的端IP地址,直到IP分片和重组,以及指定部分通信行为。IP数据报的路由和转发,IP数据报的路由和转发发生在除目标机器之外的所有主机和路由上,它们决定数据报是否应该转发以及如何转发。IP协议是TCP/IP协议族的动力,它为上层协
2018-02-04 19:01:04 343
原创 socket和TCP/IP协议族的关系
数据链路层、网络层、传输层协议是在内核中实现的,因此操作系统需要实现一组系统调用,使得应用程序能够访问这些协议提供的服务,实现这组系统调用的API有socket,socket与TCP/IP协议族的关系: 由socket定义的一组API提供两点功能:一是将应用程序数据从用户缓冲区中复制到TCP/UDP内核发送缓冲区以交付内核来发送数据,或者是从内核TCP/UDP接收缓冲区中复制数据到用户缓冲区
2018-02-04 17:42:42 337
原创 Linux下访问DNS服务
要访问DNS服务,就必须先知道DNS服务器的IP地址。Linux使用/etc/resolve.conf文件来存放DNS服务器的IP地址。 其中注释的意思是:由resolvconf生成的glibc resolver的动态resolv.conf不要用手编辑这个文件 - 你的变化将被覆盖其中两个IP地址分别是首选DNS服务器的地址和备选DNS服务器的地址。 Linux下一个常用的访问
2018-02-04 17:06:02 706
原创 DNS工作原理
我们通常使用机器的域名来访问这台机器,而不直接使用其IP地址。在访问的过程中,将机器的域名转换为IP地址可以使用域名查询服务,域名查询服务有很多种实现方式,比如NIS、DNS和本地静态文件等。DNS查询和应答报文详解 DNS是一套分布式的域名服务系统。每个DNS服务器上存放着大量的机器名和IP地址的映射,并且是动态更新的,众多网络客户端程序都使用DNS协议来向DNS服务器查询目标主机的IP地
2018-02-04 16:07:25 321
原创 epoll
epoll API执行一个类似的任务来poll:监视多个文件描述符来查看是否有任何I / O是可能的。 epoll API既可以用作edge-triggered的接口,也可以用作Level-triggered 的接口,并可以很好地扩展到大量的观察文件描述符。 提供以下系统调用来创建和管理epoll实例: * epoll_create创建一个epoll实例并返回一个引用该实例的文件
2018-02-03 14:40:53 255
原创 进程间通信
select 同时监视多个文件描述符。在指定情况发生的时候,函数返回。详细一点说, select 监昕在三组文件描述符上发生的事件:检查第一组是否可以读取,检查第二组是否可以写入,检查第三组是否有异常发生。每一组的文件描述符被记录到一个二进制位的数组中。这里的 numfds 恰好等于需要监昕的最大的文件描述符加 1 。 使用文件的IPC: 访问控制:客户端必须能够读取文件。通过使用标准文件访
2018-01-30 22:10:31 134
原创 线程与进程
Unix 从其产生伊始就将进程作为它的重要组成部分而线程是后来才加进去的。进程的概念非常清晰且统一。而线程却有着一系列的起源,它们的属性也各不相同。进程与线程有根本上的不同。每个进程有其独立的数据空间、文件描述符以及进程的ID 。而线程共享一个数据空间、文件描述符以及进程 ID 。 (1)共享数据空间 这里考虑一个在存储器中存储了巨大而复杂的树结构数据库的数据库系统。多个线程可以轻易地读取到这
2018-01-29 23:36:31 227
原创 学习线程
线程认识: 首先 Linux 并不存在真正的线程,Linux 的线程是使用进程模拟的。 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进 程是系统进行资源分配和调度的一个独立单位. 线程是进程的一个实体,是 CPU 调度和分派的基本单位,它是比进程更小 的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点 在运行中必不可少的资源(如程序计数器,一组寄存器和栈
2018-01-29 13:36:50 148
原创 基于数据报 (Datagram) 的编程:(UDP)
软件控制 程序的运行需要内存、 CPU 和一些系统资源。操作系统关心这类事情,但是一些程序还需要关心另一件事情:就是程序拥有者的允许。 从合法性的角度讲,需要有一个许可证来保证程序的合法运行,但是有些许可证却是带有限制的。 一种实施许可证技术是编写程序来执行许可证控制。通常的做法是设计从一个许可证服务器获得许可的应用程序。该服务器是一个进程,它授权应用程序的运行。 许可证服务器。程序不是从
2018-01-28 18:32:45 1070
原创 客户/服务器模型(二):模块化
基于 socket 的客户/服务器系统大多是类似的。虽然电子邮件、文件传输、远程登录和分布式数据库,以及其他的 Internet 服务在屏幕上显示的内容相异,但是它们的运作原理是一致的。一旦理解了一个 socket 流的客户/服务器系统,就可以理解大多数其他的系统。 客户连接到服务器,然后发送、接受或者交换数据,最后退出。该交互过程中主要包含了以下 3 个操作: (1)服务器设立服务。 (2
2018-01-28 12:11:04 319
原创 远程访问服务器目录
1、设计 三个需要: (1).协议 (2)客户端程序 (3)服务器端程序 2、协议 协议包含有请求和应答。首先,客户端发送一行包含有目录名称的请求。服务器读取该目录名之后打开并读取该目录,然后把文件列表发送到客户端。客户端循环地读取文件列表,直到服务器挂断连接产生文件结尾标志。 3、 客户端程序#include#include#include#include#includ
2018-01-28 10:53:32 2021
固定VMware UBUNTU的IP之后Xshell连接不上了
2017-11-29
写出TCP报头的字段值????
2017-11-05
const_cast和函数重载问题
2017-11-03
如何将数字时间导入到圆形钟表的角度
2017-07-29
C++友元函数和友元类的使用问题。
2017-07-28
TA创建的收藏夹 TA关注的收藏夹
TA关注的人