首先介绍一下gSoap,这是一个非常厉害的网络库,封装程度非常高而且跨平台。

支持SSL链接,数据格式为XML。

介绍地址:

http://sourceforge.net/projects/gsoap2/

近段时间是有项目需求,所以接触到了这个库。

自己摸索了一下,发现用这个库开发真的是非常方便。

所以,强烈推荐各位使用gSoap开发。

使用gSoap的大致步骤是:

1.下载gSoap库

2.制定自己需要的函数

3.使用soapcpp2导出需要的源文件

4.添加这些源文件和库中的2个文件到工程

5.简单的封装

6.使用

~~~~~正文分割线~~~~~

1.下载gSoap库

可以到上面给出的介绍地址中下载。

2.制定自己需要的函数

更具具体需求,写出接口函数。

要求:

1.函数返回值类型是int;

2.函数的最后一个参数,用于服务器返回数据给客户端,需要是一个指针或者引用。

3.其他参数可自定义,用于客户端传数据给服务器。

我的头文件的内容是

  1. #ifndef __gSoapApi_h__
  2. #define __gSoapApi_h__
  3. int dataStream(std::string name, double data, int &returnFlag);
  4. #endif//__gSoapApi_h__

3.使用soapcpp2导出需要的源文件

在下载的源码包的 gsoap2-8/gsoap/bin/macosx 这个目录下,可以找到我们需要的soapcpp2工具。

使用方法(在我的电脑上,具体路径请根据实际情况修改):

1.切换到刚刚写好的头文件的目录

/Users/Jason/Desktop/gSoapFoundation

2.使用soapcpp2工具

/Users/Jason/Downloads/gsoap-2.8/gsoap/bin/macosx/soapcpp2 myApi.h

然后就可以看到在目录下生成了以下8个文件

soap.nsmap:一定要用一个.cpp文件include,不然编译报错(我电脑上是这样的)

soapC.cpp:服务器和客户端都需要

soapClient.cpp:客户端需要

soapClientLib.cpp:可以不用

soapH.h:一个头文件

soapServer.cpp:服务器需要

soapServerLib.cpp:可以不用

soapStub.h:一个头文件

4.添加这些源文件和库中的2个文件到工程

注:stdsoap2.h 和 stdsoap2.cpp 都可以在源码包的 gsoap-2.8/gsoap 目录下找到。

对于客户端:

soapH.h、soapStub.h、soapClient.cpp、soapC.cpp、stdsoap2.cpp、soap.nsmap

对于服务器:

soapH.h、soapStub.h、soapServer.cpp、soapC.cpp、stdsoap2.cpp、soap.nsmap

对于我的客户端项目的pro文件,内容是:

  1. #-------------------------------------------------
  2. #
  3. # Project created by QtCreator 2015-08-14T15:22:03
  4. #
  5. #-------------------------------------------------
  6. QT       += core gui
  7. greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
  8. TARGET = gSoapClient
  9. TEMPLATE = app
  10. SOURCES += main.cpp \
  11. ../gSoapFoundation/soapClient.cpp \
  12. ../gSoapFoundation/stdsoap2.cpp \
  13. ../gSoapFoundation/soapC.cpp \
  14. client.cpp
  15. HEADERS  += \
  16. client.h

对于我的服务器项目的pro文件,内容是:

  1. #-------------------------------------------------
  2. #
  3. # Project created by QtCreator 2015-08-14T15:22:37
  4. #
  5. #-------------------------------------------------
  6. QT       += core gui
  7. greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
  8. TARGET = gSoapServer
  9. TEMPLATE = app
  10. SOURCES += main.cpp \
  11. ../gSoapFoundation/soapServer.cpp \
  12. ../gSoapFoundation/stdsoap2.cpp \
  13. server.cpp \
  14. ../gSoapFoundation/soapC.cpp
  15. HEADERS  += \
  16. server.h

5.简单的封装

在客户端,发送数据的借口,大概是这样的:

  1. bool sendDatStream(const char *server, std::string name, double data, int &returnFlag)
  2. {
  3. soap add_soap;
  4. soap_init(&add_soap);
  5. soap_call_dataStream(&add_soap, server, "", name, data, returnFlag);
  6. if(add_soap.error)
  7. {
  8. qDebug("soap error:%d,%s,%s", add_soap.error, *soap_faultcode(&add_soap), *soap_faultstring(&add_soap) );
  9. soap_end(&add_soap);
  10. return false;
  11. }
  12. soap_end(&add_soap);
  13. return true;
  14. }

在服务器,建立一个服务器和处理客户端发来数据的借口,大概是这样的:

  1. void startServer(const char *address, int port)
  2. {
  3. soap recieveSoap;
  4. soap_init(&recieveSoap);
  5. qDebug() << "Soap bind return:" << soap_bind(&recieveSoap, address, port, 100);
  6. while(true)
  7. {
  8. int s = soap_accept(&recieveSoap);
  9. if (s < 0)
  10. {
  11. soap_print_fault(&recieveSoap, stderr);
  12. qDebug() << "error";
  13. exit(-1);
  14. }
  15. qDebug() << "Socket connection successful: slave socket =" << s;
  16. soap_serve(&recieveSoap);
  17. soap_end(&recieveSoap);
  18. }
  19. }
  20. int dataStream(soap *, std::string name, double data, int &returnFlag)
  21. {
  22. qDebug() << "dataStream" << name.c_str() << data;
  23. returnFlag = 123456;
  24. return 0;
  25. }

6.使用

客户端:

  1. int returnFlag = 0;
  2. qDebug() << sendDatStream("127.0.0.1:23410", "key", 3.1415, returnFlag);
  3. qDebug() << returnFlag;

服务器:

  1. startServer("127.0.0.1", 23410);

我也写了一个示例,可以到这里下载

http://download.csdn.net/detail/wsj18808050/9012831

http://blog.csdn.net/wsj18808050/article/details/47706715

使用gSoap做一个简单的CS系统的更多相关文章

  1. 一个简单的CS系统打包过程图文版

    一个简单的CS系统打包过程图文版 1.     打包内容 1.1.  此次打包的要求和特点 主工程是一个CS系统: 此CS系统运行的先决条件是要有.Net Framework 3.5: 主工程安装完成 ...

  2. Linux内核分析第三周学习总结:构造一个简单的Linux系统MenuOS

    韩玉琪 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.Linux内 ...

  3. 20135202闫佳歆--week3 构造一个简单的Linux系统MenuOs--学习笔记

    此为个人学习笔记存档 week 3 构造一个简单的Linux系统MenuOs 复习: 计算机有三个法宝:存储程序计算机,函数调用堆栈,中断 操作系统有两把剑: 1.中断上下文的切换,保存现场和恢复现场 ...

  4. 20135220谈愈敏Blog3_构造一个简单的Linux系统MenuOS

    构造一个简单的Linux系统MenuOS 谈愈敏 原创作品转载请注明出处 <Linux内核分析>MOOC课程 http://mooc.study.163.com/course/USTC-1 ...

  5. 程序猿修仙之路--数据结构之你是否真的懂数组? c#socket TCP同步网络通信 用lambda表达式树替代反射 ASP.NET MVC如何做一个简单的非法登录拦截

    程序猿修仙之路--数据结构之你是否真的懂数组?   数据结构 但凡IT江湖侠士,算法与数据结构为必修之课.早有前辈已经明确指出:程序=算法+数据结构  .要想在之后的江湖历练中通关,数据结构必不可少. ...

  6. 使用React并做一个简单的to-do-list

    1. 前言 说到React,我从一年之前就开始试着了解并且看了相关的入门教程,而且还买过一本<React:引领未来的用户界面开发框架 >拜读.React的轻量组件化的思想及其virtual ...

  7. 使用Multiplayer Networking做一个简单的多人游戏例子-3/3(Unity3D开发之二十七)

    使用Multiplayer Networking做一个简单的多人游戏例子-1/3 使用Multiplayer Networking做一个简单的多人游戏例子-2/3 使用Multiplayer Netw ...

  8. 使用Multiplayer Networking做一个简单的多人游戏例子-1/3(Unity3D开发之二十五)

    猴子原创,欢迎转载.转载请注明: 转载自Cocos2Der-CSDN,谢谢! 原文地址: http://blog.csdn.net/cocos2der/article/details/51006463 ...

  9. HTTP lab01 做一个简单的测试用 web页面

      做一个简单的测试用 web页面     1.安装httpd服务   yum install httpd   安装完httpd服务后,系统就自动生成了/var/www/html目录     创建一个 ...

随机推荐

  1. mysql学习(九)sql语句

    SQL种类: DDL:数据定义语言 DML:数据操作语言 DQL:数据查询语言 DCL:数据控制语言 DDL: show databases; //查询数据库 create database if n ...

  2. gridView行号的显示

    我们在进行开发的时候,很多地方希望dataGridview或girdView显示行号,这里我来说一下两种的实现方法 在girdView中很简单很好实现,我在这里写一下代码,具体其他功能可以看其带的DE ...

  3. sed高级命令

    所谓高级,主要是指这里将要提到的命令都能改变sed执行或者控制的流程顺序(sed通常都是一行被读入模式空间,并用脚本中的sed命令一个接一个的应用于那一行). 高级sed命令分成3个组: 1)处理多行 ...

  4. ajax 数据回传

    response.getWriter().print(reval > 0 ? true : false); //=========================== Object[] str ...

  5. BASH 进阶(转载防丢)

    基础 学习 Bash 的基础知识.具体来说,输入 man bash 并至少全文浏览一遍; 它很简单并且不长.其他的 shell 可能很好用,但 Bash 功能强大且几乎所有情况下都是可用的 ( 只学习 ...

  6. Hibernate摘记

    原理: 1.通过Configuration().configure();读取并解析hibernate.cfg.xml配置文件2.由hibernate.cfg.xml中的<mapping reso ...

  7. CreateFile函数详解(确实很详细)

    CreateFile The CreateFile function creates or opens the following objects and returns a handle that ...

  8. 50% 的财富 500 强企业使用 Windows Azure

    在上周的北美TechEd大会上,我有幸见到了来自世界各地的客户.合作伙伴和分析师,其数量之多,让人震惊.没有什么比亲耳聆听使用 Windows Azure 来开创新天地的客户亲口讲述他们的故事更令人振 ...

  9. 普林斯顿大学算法课 Algorithm Part I Week 3 重复元素排序 - 三路快排 Duplicate Keys

    很多时候排序是为了对数据进行归类,这种排序重复值特别多 通过年龄统计人口 删除邮件列表里的重复邮件 通过大学对求职者进行排序 若使用普通的快排对重复数据进行排序,会造成N^2复杂度,但是归并排序和三路 ...

  10. res://ieframe.dll/acr_error.htm 纯手动解决方法

    res://ieframe.dll/acr_error.htm 引起这个原因的是,你IE浏览器的扩展组件的问题,因为不知道是具体哪个组件出了问题,所以要采用一刀切的方法来处理: 在开始/或开始键+R, ...