2012年12月23日
⁄ C++
⁄ 被围观 3,202 次+
最近在研究XMPP协议,client端用的是开源的Gloox库,server使用gtalk server和OpenFire。昨天想实现XMPP的文件传输,于是仔细看了下XMPP的文件传输协议,结合协议和代码,算是把标准XMPP文件传输协议摸清楚了。下面是一些要点总结。
XMPP主要支持两种形式的文件传输协议:SOCKS5 Bytestreams和 In-Band Bytestreams ,后者效率有问题,不建议使用。
Sock5 Bytestreams支持点对点传输和通过Proxy中转。
标准XMPP,使用Disco来发现代理服务器,所以即使发送方没有配置proxy server也没有问题(理论上哈)。不错的...
C++, file transfer, gloox, google talk, MFC, windows, XMPP阅读全文
2012年05月18日
⁄ C++, 操作系统
⁄ 被围观 2,623 次+
项目背景:
在自己的电脑装了linux 虚拟机,想要在外网也能ssh到虚拟机进行开发,由于路由ip是动态ip,想到网上找一些动态dns域名解析,但是效果不大好,所以想到自己进行外网ip的管理。
想法:
用C++写一个界面客户端,随系统启动,定时访问自己的cgi,更新自己的外网ip;这个客户端能支持简单的几个操作:启动,退出,设置更新间隔,是否随系统启动等。
写一个cgi,接收client请求,并记录最新的外网ip到数据库;
写另外一个cgi,在其他地方访问能列出当前最新的外网ip,以及历史ip列表。
可以再写一个跳...
阅读全文
首先安装ctags,安装过程网上很多,就不多讲,安装之后执行ctags -R,就可以在本项目内实现代码跳转了,但不能跳转到不是在本项目的代码中定义的tag。例如在上面的图中,本地定义了一个类A,在main函数中定义了一个A类的对象,我们可以按“Ctrl+]”组合键跳转到class A那一行。然后可以按“Ctrl+O”跳转回来。
如果想实现跳转到非本项目的tag,则必须让Vim知道这些tag在哪。刚才的项目在/home/user/code/目录下,现在假设又有一个项目在/home/user/program/下,那么我们需要在此项目下生成program这个项目的tags文件(...
阅读全文
概述
——
什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些 Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要懂。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义。特别在Unix下的软件编译,你就不能不自己写makefile 了,会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力。
因为,makefile关系到了整个工程的编译规则。一个工程中的源文件不计数,其按类型、功能、模块分别...
阅读全文
protobuf
项目主页:http://code.google.com/p/protobuf/
下载:http://code.google.com/p/protobuf/downloads/list protobuf-2.4.1.tar.gz
解压后进入protobuf-2.4.1目录进行安装:
1、./configure(注:默认可能会安装在/usr/local目录下,可以加--prefix=/usr来指定安装到/usr/lib下,可以免去路径的设置,路径设置见Linux命令pkg-config)
./configure --prefix=/usr/local/protobuf
2、make
3、make check
4、make install(需要超级用户root权限)
二、使用
1、写proto文件,定义消息具体格式。如:helloworld...
阅读全文
protobuf的Demo程序是
C++版本的protubuf有几种serialize和unSerialize的方法:
方法一:
官方demo程序采用的是
// Write the new address book back to disk.
fstream output(argv[1], ios::out | ios::trunc | ios::binary);
if (!address_book.SerializeToOstream(&output)) {
cerr << "Failed to write address book." << endl;
return -1;
}
// Read the existing address book.
fstream input(argv[1], ios::in | ios::binary);
if (!input) {
cout << argv[1] << ": Fi...
阅读全文
原文:http://www.wuzesheng.com/?p=1258
本文的主要内容是google protobuf中序列化数据时用到的编码规则,但是,介绍具体的编码规则之前,我觉得有必要先简单介绍一下google protobuf。因此,本文首先会介绍一些google protobuf相关的内容,让读者朋友对google protobuf有一个初步的印象,然后,再开始进入正题—-深入浅出地介绍google protobuf中用到的编码规则。下面言归正传,开始今天的话题。
1. Google-ProtoBuf是什么
ProtoBuf,全称是Protocol Buffers, 它是谷歌内部用的一种高效的、可扩展的对结构化数据...
阅读全文
ProtoBuf,全称是Protocol Buffers, 它是谷歌内部用的一种高效的、可扩展的对结构化数据进行编码的格式规范。谷歌自己内部很多程序之间的通信协议都用了ProtoBuf。
下面介绍的是使用Java ProtoBuf的基本步骤:
1.http://code.google.com/p/protobuf/downloads/list ,选择其中的win版本下载
2.下载一个protobuf-java-2.4.1.jar文件(注意,要与你刚才下的proto.exe版本相同,否则可能出现编译通不过现象)
http://grepcode.com/snapshot/repo1.maven.org/maven2/com.google.protobuf/protobuf-java/2.4.1
3...
阅读全文
几个关键字:
进程结构task_struct;系统task_stuct数组;
进程状态:
进程时间片;
进程切换时,系统需要做那些保存操作;
进程创建过程,fork();
工作队列;
进程调度。
阅读全文
本章完全是基础知识了,归纳下几点:
在不同的CPU体系结构上,C语言的数据类型所占的空间是不一样的;
为了方便移植,内核中很多数据类型由typedef声明;
内存页面大小;
字节对齐方式:低字节优先&高字节优先;
内核通用链表;
行内汇编的格式;
内核时间延迟;
阅读全文