RTSP客户端模拟器(TCP方式,Python实现)
摘要:由于某种需求,工作中需要自己要开发RTSP客户端模拟器……这里以DarwinStreamingServer(简称DSS)为例进行演示,把思路记录下来,算是开发了一个测试工具,也方便我以后查阅。在我之前的文章(http://www.cnblogs.com/MikeZhang/archive/2012/09/16/RTSPoverTCPUDP20120916.html )中介绍过怎样通过TCP的方式来访问DSS,在那个实例中,我用的是VLC作为客户端,通过命令行参数进行调用的。一、通信端口分析首先通过抓包分析确定数据通信端口。RTSP数据包截图:RTP数据包截图:RTCP数据包截图:由图可知,在以
阅读全文
posted @
2012-10-29 23:40
Mike_Zhang
编辑
交换指针
摘要:通常情况下,我们只是对普通数据进行交换,交换指针的问题很少涉及,今天看书时候想到了指针交换问题,这里总结下,也方便我以后查阅。首先看下整型两个数据的交换(这个比较简单,就不多介绍了),核心代码如下:1 void m_swap(int *a,int *b)2 {3 int tmp = *a;4 *a = *b;5 *b = tmp;6 }指针是内存地址,应该也算是整型变量,交换两个指针和交换两个整型变量类似,下面以两种方式进行。传统C方式可以通过传递指向指针的指针来进行交换,核心代码如下:1 void m_swap(int **a,int **b)...
阅读全文
posted @
2012-10-26 00:47
Mike_Zhang
编辑
动态分配const对象(C++)
摘要:创建在C++中,允许动态创建const对象,格式如下:const int *p = new const int(128);与其他常量一样,动态创建的const对象必须在创建时初始化,并且初始化后,其值不能改变。删除尽管不能改变const对象的值,但可以删除动态创建的const对象,格式如下:delete p;这个和普通的对象一样,可以对其进行删除操作。应用场景举例1、加载配置文件从配置文件读入的数据可以用来初始化const对象,供后续程序使用。伪代码如下:int num;... //读取配置文件,并将配置数据填充到numconst int *pNum = new const int(num);
阅读全文
posted @
2012-10-22 23:04
Mike_Zhang
编辑
Libevent笔记
摘要:Libevent简介libevent是一个基于事件触发的网络库,适用于windows、linux、bsd等多种平台,内部使用select、epoll、kqueue等系统调用管理事件机制。官网:http://libevent.org/特点:事件驱动,高性能;轻量级,专注于网络,不如ACE那么臃肿庞大,只提供了简单的网络API的封装,线程池,内存池,递归锁等均需要自己实现;开放源码,代码相当精炼、易读;跨平台,支持Windows、Linux、BSD和Mac OS;支持多种I/O多路复用技术(epoll、poll、dev/poll、select和kqueue等),在不同的操作系统下,做了多路复用模型
阅读全文
posted @
2012-10-21 22:40
Mike_Zhang
编辑
C++短路求值(逻辑与、逻辑或)
摘要:1、逻辑或的短路首先看如下代码:#include <iostream>using namespace std;int main(){ int a = 1; cout << "a = " << a <<endl; true || (a=0); cout << "a = " << a <<endl;}运行结果:a = 1a = 1逻辑或的表现形式如下:expression1 || exexpression2这里用到了逻辑或,由于逻辑或的短路,expression1为true,
阅读全文
posted @
2012-10-21 00:02
Mike_Zhang
编辑
在成员函数中使用STL的find_if函数
摘要:STL的find_if函数功能很强大,可以使用输入的函数替代等于操作符执行查找功能(这个网上有很多资料,我这里就不多说了)。比如查找一个数组中的奇数,可以用如下代码完成(具体参考这里:http://www.cplusplus.com/reference/algorithm/find_if/):#include <iostream>#include <algorithm>#include <vector>using namespace std;bool IsOdd (int i) { return ((i%2)==1);}int main () { vecto
阅读全文
posted @
2012-10-18 21:17
Mike_Zhang
编辑
Boost实现简单的udp代理服务器
摘要:这段时间在开发代理服务器,这方面的资料了解的比较多,这里我总结下udp代理服务的实现,也方便我以后查阅。一、通信模型1、非代理情况下的通信模型这是典型的C-S通信模型,客户端和服务器直接交互。2、代理情况下的通信模型这种情况下,服务器和客户端不是直接交互,而是通过代理服务器进行的,代理服务器负责把客户端发来的请求转发给服务器,并把服务的回应返回给客户端。二、UDP服务器和客户端demo上面分析了通信模型,这里给出一个echo的服务器和客户端代码以供下文使用。1、服务端demo这里有一个python实现的echo服务器,代码如下:#! /usr/bin/python# a simple udp
阅读全文
posted @
2012-10-15 00:19
Mike_Zhang
编辑
简单的TCP代理服务器
摘要:我之前的一篇文章(http://www.cnblogs.com/MikeZhang/archive/2012/03/07/socketRedirect.html )中介绍过用python写的一个简单的http端口转发程序,其实那个也算是个代理服务器,只是功能比较简单罢了。由于这段时间在开发代理服务器,接触到各个方面的资料,这里总结下,也方便我以后使用。一、netcat实现网址:http://netcat.sourceforge.net/ netcat是个很强大的工具,在网络工具中有“瑞士军刀”美誉,不懂的搜索下,我就不多说了,相关用法可参考这里:http://en.wikipedia.org.
阅读全文
posted @
2012-10-09 23:48
Mike_Zhang
编辑
用wireshark过滤特定主机数据包
摘要:经常用wireshark写一些如下的表达式进行过滤和特定主机的通信:ip.src==192.168.1.100 or ip.dst==192.168.1.100如图所示:由于wireshark中的Filter框的下拉列表只有两个历史记录(这个暂时没有找到配置的地方……),如果涉及的主机比较多的话,需要每次输入过滤器中的ip(或者更改),感觉比较麻烦。由于这段时间经常用,发现一个小技巧,这里写出来分享给大家,不足之处欢迎指出。我们可以看到,在Filter框的右侧有个Save按钮:点击Save按钮,弹出如下对话框(我填了“Filer100”):点击OK后,发现在右侧出现了个Filter100的按钮
阅读全文
posted @
2012-10-03 10:01
Mike_Zhang
编辑