技术杂谈
文章平均质量分 77
study_live
这个作者很懒,什么都没留下…
展开
-
Sendmail提示身份验证失败问题解决
问题描述: SendMail安装成功并已启动,利用foxmail可以收发Mail, 只是当选中“SMTP服务器需要身份验证”是,发送mail总是验证失败, 使用telnet登陆smtp服务器,输入ehlo ip返回信息如下:250-ENHANCEDSTATUSCODES250-PIPELINING250-8BITMIME250-SIZE250-DSN250-ETRN原创 2009-12-26 13:53:00 · 5793 阅读 · 0 评论 -
C/C++中手动获取调用堆栈
当我们的程序core掉之后,如果能获取到core时的函数调用堆栈将非常有利于定位问题。在Windows下可以使用SEH机制;在Linux下通过gdb使用coredump文件即可。但有时候由于某些错误导致堆栈被破坏,发生拿不到调用堆栈的情况。一些基础预备知识本文不再详述,可以参考以下文章:函数调用栈的获取原理分析寄存器、函数调用与栈帧需要知道的信息:函数调用对转载 2015-01-29 18:40:27 · 842 阅读 · 0 评论 -
函数调用栈的获取原理分析
上一篇文章《在Linux程序中输出函数调用栈》,讲述了在Linux中如何利用backtrace获取调用栈,本篇文章主要介绍一下获取函数调用栈的原理,并给出相应的实现方式。要了解调用栈,首先需要了解函数的调用过程,下面用一段代码作为例子:#include int add(int a, int b) { int result = 0; result = a + b转载 2015-01-29 17:56:53 · 2807 阅读 · 2 评论 -
windows下捕获dump
一般要捕获异常只需要两个函数:SetUnhandledExceptionFilter截获异常;MiniDumpWriteDump写dump文件。但是由于CRT函数可能会在内部调用SetUnhandledExceptionFilter(NULL),解除我们程序设置的异常处理,这导致我们的程序无法完整捕获崩溃。另外,还有一部分非异常的CRT错误,不属于SEH异常捕获的范畴,需要通过_set_inval转载 2015-01-29 17:46:48 · 570 阅读 · 0 评论 -
关于使用libcurl的注意事项
ibcurl与CLOSE_WAIT转载自:http://blog.sunshow.net/2010/03/libcurl-and-close-wait/调用libcurl下载,然后使用netstat查看发现有大量的TCP连接保持在CLOSE_WAIT状态查看libcurl的文档说明,有这样一个选项:CURLOPT_FORBID_REUSEPass a lon转载 2012-05-22 17:45:56 · 3264 阅读 · 1 评论 -
Ubuntu 10.04 用Wine完美运行QQ 2009
<br /> <br />话说“麻花藤”LinuxQQ不是一般的Bug,在Ubuntu10.04下窗口最大化也不行,最恼火的是Linuxqq在Ubuntu 10.04下活不过半分钟!!<br /> <br />当然,Ubuntu自带的那个 Empathy也还是可用的(PS:你要在高级设置里把版本调节为2008)。。<br />当然,今天是告诉兄弟们如何在Ubuntu下用Wine来运行Windows版的QQ。<br />为啥昵?不是哥蛋疼不过,因为经过测试发现Wine模拟的QQ还是比较稳定的,应该说比Linu转载 2010-09-14 16:50:00 · 1125 阅读 · 0 评论 -
gloox代码分析1 - connect模块
<br />主要分析gloox的connect模块,涉及的文件:<br />connectionbase.h<br />connectiondatahander.h<br />connectionhandler.h<br />connectiontcpbase.h (connectiontcpbase.cpp)<br />connectiontcpclient.h (connectiontcpclient.cpp)<br />connectiontcpserver.h (connectiontcpserve转载 2010-07-14 11:30:00 · 1049 阅读 · 0 评论 -
Gloox发送消息
<br />Gloox发消息很简单,通过前面的接消息的描述,当需要与远端进行通话时,建立一个MessageSession会话,一旦你拥有这样的一个会话对象了,就可以调用其中的send方法来向远端发送消息了。那么这个MessageSession如何获得呢?<br />通过前面接消息的描述,如果是远端先给你发了消息,此时gloox后台就会创建一个MessageSession对象出来,而如果你收到这个MessageSession传来的消息之后,如果不将其删除,并且通过某种数据结构,如STL中的map,其关键字是远原创 2010-07-14 11:48:00 · 1125 阅读 · 0 评论 -
gloox连接至服务器端
<br />在使用gloox之前,有必要先提一下XMPP协议这个东东。<br />XMPP协议是一个基于互联网的即时通信标准协议。它采用XML技术,以文本的方式传输即时消息。支持动态自定义扩展应用。与传统的网络协议相比,如QQ等,XMPP协议并不是一个基于二进制方式实现的协议,而是基于XML技术的文本方式,也就是说如果不采用加密技术的话,是可以直接查看发送的消息的。XMPP协议通过定义一些XML的节点关键字,来表明消息发送信息,并与其它协议能够有效的结合,总的说来,XMPP协议是一种很不错的准实时消息协议标转载 2010-07-14 11:47:00 · 1141 阅读 · 0 评论 -
gloox接收消息
<br />通过前面的描述,当和服务器建立了连接之后,就可以和服务器进行通讯了,今天先说一下接收远端发送来的文本消息的方式吧。<br />在接收消息之前,需要明确一件事情,就是一旦你登陆至服务器之后,随时有可能有人人给你发来消息,所以应该考虑的是你需要做一个死循环,不断的监听消息,如果有消息之后,根据消息的不同形式,处理它。当然不用担心,觉得用个死循环很影响效率,实际上做过socket的 就明白了,当你调用接收消息的函数时,是会阻塞的,如果没有消息,就阻塞,这样就不会浪费资源了。另外由于阻塞的缘故,所以我们转载 2010-07-14 11:49:00 · 1128 阅读 · 0 评论 -
gloox代码分析4 - private xml storage
<br />这部分的作用是客户端可以存放任意格式的私有xml数据到服务器上,并且在想要查看的时候取回!<br /><br />1.协议 - XEP-0049 - http://xmpp.org/extensions/xep-0049.html<br />2. jabber client可以保存任意的xml数据到服务器,通过一个<iq type="set">的请求.该请求需要包含一个名称空间<br />为jabber:iq:private的<query/>子元素. <query/>的子元素就是我们需要保存的私转载 2010-07-14 11:44:00 · 943 阅读 · 0 评论 -
gloox代码分析2 - xml parser模块
<br />gloox自己实现了xml的解析模块,没有用到第三方的库(tinyXML,expat )<br />主要涉及的文件:<br />tag.h (tag.cpp)<br />taghandler.h<br />parser.h (parser.cpp)<br /><br />1. Tag一个Tag就是一个XML元素<br />例如:<br />a. <br /><book kind='computer'><br /><store id='23'/><br /><author><br /> qi转载 2010-07-14 11:32:00 · 1097 阅读 · 0 评论 -
XMPP客户端库资料
<br /> 最近需要做一个IM即时聊天工具项目, 上网搜集了一些关于XMPP方面的资料, 将C/C++客户端库都列出来了, 由于E文水平不好, 可能有许不多正确地方, 见笑了!!!<br /> <br />gloox<br />gloox是一个稳定功能完整的XMPP客户端库, 使用ANSI C++编写, 使用它编写标准客户非常容易, 并能将Jabber/XMPP功能集成到现有的应用程序中, gloox遵循GNU GPL许可协议, 支持商业许可.<br />特点:<br /> 1. 易于使用原创 2010-07-14 11:28:00 · 2516 阅读 · 1 评论 -
XMPP协议内容
XMPP协议网址大全转载 2010-07-12 17:25:00 · 1690 阅读 · 0 评论 -
利用SMTP发送Mail详解(一)
<!--v/:* {behavior:url(#default#VML);}o/:* {behavior:url(#default#VML);}w/:* {behavior:url(#default#VML);}.shape {behavior:url(#default#VML);}--> Normal 0 7.8 磅 0 2原创 2010-01-09 11:02:00 · 9485 阅读 · 0 评论 -
在Linux程序中输出函数调用栈
程序发生异常时,将函数的调用栈打印出来,可以大大提高定位效率。Linux中提供了三个函数用来获取调用栈:/* 获取函数调用栈 */int backtrace(void **buffer, int size);/* 将调用栈中的函数地址转化为函数名称 并返回一个字符串数组 */char **backtrace_symbols(void *const *buffer, int转载 2015-01-29 17:54:54 · 678 阅读 · 0 评论