您的位置:首页 > 编程语言 > C语言/C++

HESSIAN 的VC++ 客户端与JAVA服务端通信 实现

2013-04-24 00:20 423 查看

HESSIAN的VC++
客户端与JAVA服务端通信实现

最近碰到一项目,需要与JAVA服务端通信,JAVA服务端使用的协议是HESSIAN。没听过,谷歌一下找到其官方网站(http://hessian.caucho.com/)简略一看,类似于C#的web
servers,二进制WEB服务,再谷歌一下,效率比web servers
要高和SOCKET 差不多。

转正题,官方文档支持C++实现(不支持你丫也好意思)下了源码大致看了下,baidu一把,支持hessian支持HTTP协议,将协议封装在HTTP封包中,通过HTTP信道传送。因为他是采用二进制编码没有多余的数据,数据量比SOAP协议少得多(这个项目还用到SOAP协议)。
既然支持HTTP协议,心想支持当然可以用MFC里面封装好的HTTP
类库来处理CHttpConnection 和CInternetSession 看了下HESSIAN源码 无非就是装传入字符串进行转化 再POST到服务端,下了一个demo 改一下,一调 服务端 返回确实是返回了,不过返回的是 500错误(未知的服务器错误)
,找半天也不知道什么原因,继续GOOGLE之,发现了CURL
这个好东东(http://curl.haxx.se/),支持DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP,LDAPS, POP3, POP3S, RTMP, RTSP, SCP,
SFTP, SMTP, SMTPS 这多协议。这NB,但哥不会用啊。又只好看例子,下demo
好吧弄着一调,服务端一调可以了。废话说完,进入正题。主要流程如下:
调用 start_call(method)对要远程调用的方法名运行字符转换,具体转换可以看hessian源码
调用 set_parameter(mc,param)将参数字符串进行转换 并和转换后的远程方法名进行拼接。
调用complete_call(string strParam) 为字符串设置结束标识 加z
传出数据准备完成。该主角登场CURL
调用curl_easy_setopt分别设置CURLOPT_URL CURLOPT_POSTFIELDS, CURLOPT_POSTFIELDSIZE 参数含义参见官方网站,
_res=curl_easy_perform(_curl) 向远程网站发送http封包
若返回成功 调用hessian_input 里面的 函数 接收数据
auto_ptr<input_stream> sis(new string_input_stream(_http_result));
hessian_input hes_in(sis);
hes_in.start_reply();
result = hes_in.get_result();
hes_in.complete_reply();
好吧完事了 看着蛮容易,实际也不是太难,主要是之前不知道还有CURL这个东东。如果还需要帮助可以发邮件给我luoj166@163.com 。下一篇写VC++调用JAVA 的webservers 带HTTP 头验证
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: