使用xmpp库loudmouth连接google talk服务器
来源:互联网 发布:一不小心买了淘宝爆款 编辑:程序博客网 时间:2024/05/22 06:23
google talk的通信协议采用的是xmpp,xmpp是开放协议。gmail邮箱中的聊天功能就是基于这个协议实现的吧。xmpp客户端协议都多种语言实现包括 javascript,c,c++,c#,python等。
loudmouth是xmpp客户端协议的轻量级易于使用的c语言实现。目前正在发展中,虽然功能还不丰富,但基本的功能都已具备。
下载目前(2011-02-20)的最新版。加压后执行著名的“./configure ; make ; make install”三部曲即可。但有些事情需要注意
b)连接google talk 服务器需要ssl支持,loudmouth支持gnutls和openssl,我使用的是openssl。在configure的时候要把ssl的支持打开,for example
废话不多说了贴代码吧。
保存为 xmpp_test.c,用如下命令编译即可:
上面命令的第一个参数是google talk的服务器,其余的就不用说了吧。不出意外的话yyyy@gmail.com就能收到xxxxx@gmail.com发送的消息“hello”。(如果你开着yyyy@gmail.com这个gmail,就能在gmail中看到这条消息啦)
测试程序最后进入main loop。如果有别人发送来的消息便打印出来。
代码中的
是不可少的,不然连不上google talk。关于xmpp的更多信息请查看http://xmpp.org
loudmouth是xmpp客户端协议的轻量级易于使用的c语言实现。目前正在发展中,虽然功能还不丰富,但基本的功能都已具备。
1)下载并编译loudmouth
wget ftp://ftp.gnome.org/pub/GNOME/sources/loudmouth/1.4/loudmouth-1.4.3.tar.bz2下载目前(2011-02-20)的最新版。加压后执行著名的“./configure ; make ; make install”三部曲即可。但有些事情需要注意
a)loudmouth依赖glib库(gnome平台的c基础库)。使用
pkg-config --cflags --libs glib-2.0我这儿的输出是 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -lglib-2.0
b)连接google talk 服务器需要ssl支持,loudmouth支持gnutls和openssl,我使用的是openssl。在configure的时候要把ssl的支持打开,for example
./configure --prefix=/usr/local --with-ssl=openssl CFLAGS=“-g -O0”加上-g -O0便于调试
2)查看安装结果
根据上面的配置,我安装到了 /usr/local 下。所以执行export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig然后执行 pkg-config --cflags --libs loudmouth-1.0应该有如下输出:
-I/usr/local/include/loudmouth-1.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -L/usr/local/lib -lloudmouth-1 -lglib-2.0
3)连接google talk
首先要有一个xmpp的帐号,对于google talk的xmpp实现来说就是一个gmail帐号,xxxx@gmail.com 之类的。废话不多说了贴代码吧。
#include <loudmouth/loudmouth.h>#include <stdio.h>static LmHandlerResult lm_message_handle (LmMessageHandler *handler, LmConnection *conn, LmMessage *msg, gpointer data);intmain (int argc, char **argv) { LmConnection *conn; GError *error = NULL; LmMessage *m; LmSSL *ssl; LmMessageHandler *msghandler; if (argc < 6) { g_print ("Usage: test server username password recipient message"); return -1; } conn = lm_connection_new (argv[1]); ssl = lm_ssl_new (NULL, NULL, NULL, NULL); lm_ssl_use_starttls (ssl, TRUE, TRUE); lm_connection_set_ssl (conn, ssl); if (!lm_connection_open_and_block (conn, &error)) { g_print ("Couldn't open connection to '%s':\n%s\n", argv[1], error->message); return -1; } if (!lm_connection_authenticate_and_block (conn, argv[2], argv[3], "MyTestApp", &error)) { g_print ("Couldn't authenticate with '%s' '%s':\n%s\n", argv[2], argv[3], error->message); return -1; } msghandler = lm_message_handler_new (lm_message_handle, NULL, NULL); lm_connection_register_message_handler (conn, msghandler, LM_MESSAGE_TYPE_MESSAGE, LM_HANDLER_PRIORITY_LAST); m = lm_message_new (argv[4], LM_MESSAGE_TYPE_MESSAGE); lm_message_node_add_child (m->node, "body", argv[5]); if (!lm_connection_send (conn, m, &error)) { g_print ("Error while sending message to '%s':\n%s\n", argv[4], error->message); } lm_message_unref (m); g_main_loop_run (g_main_loop_new (NULL, FALSE)); lm_connection_close (conn, NULL); lm_connection_unref (conn); return 0;}static LmHandlerResult lm_message_handle (LmMessageHandler *handler, LmConnection *conn, LmMessage *msg, gpointer data){ LmMessageNode *root_node = lm_message_get_node (msg); LmMessageNode *body_node = lm_message_node_get_child (root_node, "body"); const gchar *value; const gchar *from = lm_message_node_get_attribute (root_node, "from"); if (body_node) { value = lm_message_node_get_value (body_node); printf("recv msg(from \'%s\'): %s\n", from, value); } return LM_HANDLER_RESULT_ALLOW_MORE_HANDLERS;}
保存为 xmpp_test.c,用如下命令编译即可:
gcc -g -O0 -o xmpp_test `pkg-config --cflags --libs loudmouth-1.0` xmpp_test.c
4) 测试
生成测试程序 xmpp_test,现在终于可以测试了。./xmpp_test talk.l.google.com xxxxx@gmail.com passworld yyyy@gmail.com hello
上面命令的第一个参数是google talk的服务器,其余的就不用说了吧。不出意外的话yyyy@gmail.com就能收到xxxxx@gmail.com发送的消息“hello”。(如果你开着yyyy@gmail.com这个gmail,就能在gmail中看到这条消息啦)
测试程序最后进入main loop。如果有别人发送来的消息便打印出来。
代码中的
ssl = lm_ssl_new (NULL, NULL, NULL, NULL); lm_ssl_use_starttls (ssl, TRUE, TRUE); lm_connection_set_ssl (conn, ssl);
是不可少的,不然连不上google talk。关于xmpp的更多信息请查看http://xmpp.org
- 使用xmpp库loudmouth连接google talk服务器
- Google Talk gives boost to XMPP
- Gaim 下使用 google talk
- XMPP如何连接服务器
- gloox连接xmpp服务器
- Pidgin 连接 Google Talk 的配置
- Android studio使用smack连接xmpp服务器收发消息
- Android studio使用smack连接xmpp服务器收发消息
- Google Talk
- google talk
- google talk
- XMPP通讯开发-服务器连接
- Android XMPP Service (Google Talk) + Google Map == Follow Me
- Android XMPP Service (Google Talk) + Google Map == Follow Me
- 在gaim中使用google talk im
- 在gaim中使用google talk
- 在linux下使用google talk
- gloox连接到服务器(一个XMPP的库)
- 一个关于文件下载的问题
- 钱包可以扔一边了 实用iPhone保护壳直接集成钱包功能
- MFC简单皮肤颜色绘制(SetDialogBkColor不再被支持,看 WM_CTLCOLOR消息如何百变控件颜色)
- JSch操作实现SSH命令功能
- 设置mysql最大连接数的方法
- 使用xmpp库loudmouth连接google talk服务器
- 巴西乌龟
- SNMP--RFC2272
- IOS新浪微博SDK AUTH2.0认证
- WEB发送请求从后台取数据以JSON的形式实现数据加载
- 关系数据库基础知识
- vim学习笔记
- 在plsql中创建jobs
- 592site.com城市导航