1. gsoap的好处就不用说了:百度百科

2. gsoap的下载地址:项目地址,目前我使用的是2.8.15版本

3. 开发环境:Ubuntu13.10

4. 具体操作步骤(以简单相加为例):

  1) 编写add.h(头文件)

//gsoap ns service name: calc
//gsoap ns service protocol: SOAP
//gsoap ns service style: rpc
//gsoap ns service encoding: encoded
//gsoap ns service namespace: http://localhost:8888
//gsoap ns service location: http://localhost:8888
//gsoap ns service port: http://localhost:8888 int ns__add( int num1, int num2, int* sum );

  2) 编写addserver.c(服务器)

#include "soapH.h"
#include "calc.nsmap" /* 与add.h的第一行命名空间(ns)有关 */
#include <stdio.h>
#include <stdlib.h>
int
main (int argc, char *argv[])
{
int m, s;
struct soap add_soap;
soap_init (&add_soap);
if (argc < )
{
printf ("usage: %s <server_port> \n", argv[]);
exit ();
}
else
{
m = soap_bind (&add_soap, NULL, atoi (argv[]), );
if (m < )
{
soap_print_fault (&add_soap, stderr);
exit (-);
}
fprintf (stderr, "Socket connection successful: master socket = %d\n",m);
for (;;)
{
s = soap_accept (&add_soap);
if (s < )
{
soap_print_fault (&add_soap, stderr);
exit (-);
}
fprintf (stderr,
"Socket connection successful: slave socket = %d\n", s);
soap_serve (&add_soap); //该句说明该server的服务
soap_end (&add_soap);
}
}
return ;
} int
ns__add (struct soap *add_soap, int num1, int num2, int *sum)
{
*sum = num1 + num2;
return ;
}

  3) 编写addclient.c(客户端)

#include "soapH.h"
#include "calc.nsmap" /* 与add.h的第一行命名空间(ns)有关 */
#include <stdio.h>
#include <stdlib.h> int add (const char *server, int num1, int num2, int *sum); int
main (int argc, char **argv)
{
int result = -;
char *server = "http://localhost:4567"; /* 定义server */
int num1 = ;
int num2 = ;
int sum = ;
if (argc < ) /* 判断传入参数 */
{
printf ("usage: %s num1 num2 \n", argv[]);
exit ();
}
num1 = atoi (argv[]);
num2 = atoi (argv[]);
result = add (server, num1, num2, &sum); /* 执行add() */
if (result != ) /* 输出result */
{
printf ("soap err,errcode = %d\n", result);
}
else
{
printf ("%d+%d=%d\n", num1, num2, sum);
}
return ;
} int
add (const char *server, int num1, int num2, int *sum)
{
struct soap add_soap; /* 创建add_soap()结构体 */
int result = ;
soap_init (&add_soap); /* soap_init()*/
soap_call_ns__add (&add_soap, server, "", num1, num2, sum); /* 调用soap_call_ns_add() */
if (add_soap.error)
{
printf ("soap error:%d,%s,%s\n", add_soap.error,
*soap_faultcode (&add_soap), *soap_faultstring (&add_soap));
result = add_soap.error;
}
soap_end (&add_soap); /* 释放内存空间 */
soap_done (&add_soap);
return result;
}

  4) 编写Makefile文件

# this is a Makefile to build client and server
# please setting the GSOAP_ROOT first.
# build procedure:
# step1: make soap
# step2: make all OBJ_NS := calc
OBJ_NAME := add
GSOAP_ROOT := /home/scue/work/gsoap_2.8.15/gsoap
INCLUDE := -I$(GSOAP_ROOT) CC := clang
GCC := clang
#CC := arm-linux-gcc
#GCC := arm-linux-gcc OBJ_SERVER := soapC.o stdsoap2.o soapServer.o $(OBJ_NAME)server.o
OBJ_CLIENT := soapC.o stdsoap2.o soapClient.o $(OBJ_NAME)client.o all: server client server: $(OBJ_SERVER)
$(CC) $(INCLUDE) $^ -o $@
client: $(OBJ_CLIENT)
$(CC) $(INCLUDE) $^ -o $@ .PHONY:soap
soap:
@cp -v $(GSOAP_ROOT)/stdsoap2.* .
@$(GSOAP_ROOT)/bin/linux386/soapcpp2 -c $(OBJ_NAME).h
# -c 表示生成c文件 .PHONY:clean
clean:
rm -f server client *.o
distclean:
rm -f server client *.o ns* soap* *.xml *.nsmap *.wsdl stdsoap2.*

  5) 编译及验证

make soap && make
./server
./client 3 #将会返回5,也可以直接在浏览器中输入http://localhost:4567进行验证

参考文章:

  1.http://blog.csdn.net/wesleyluo/article/details/5532633

〖Linux〗使用gsoap搭建web server(C)的更多相关文章

  1. 〖Linux〗使用gsoap搭建web server(C++)

    1. gsoap的好处就不用说了:百度百科 2. gsoap的下载地址:项目地址,目前我使用的是2.8.15版本 3. 开发环境:Ubuntu13.10 4. 具体操作步骤(以简单相加为例): 1)编 ...

  2. express快速搭建web server

    安装express4.x npm install -g express npm install -g express-generator //express命令行工具在4.x分离出来了 express ...

  3. 从零开始的ESP8266探索(1)-使用Server功能搭建Web Server

    https://blog.csdn.net/Naisu_kun/article/details/80398667 文件系统 https://blog.csdn.net/solar_Lan/articl ...

  4. python搭建web server

    假设你急需一个简单的Web Server,但你又不想去下载并安装那些复杂的HTTP服务程序,比方:Apache,ISS等.那么, Python 可能帮助你.使用Python能够完毕一个简单的内建 HT ...

  5. Linux服务器上搭建web项目环境

    一.下载并安装jdk 去官网下载linux系统上jdk的安装包jdk-8u181-linux-x64.tar.gz,在Linux的/usr目录下新建文件夹java,可以使用命令:cd /usr    ...

  6. virtualbox搭建ubuntu server nginx+mysql+tomcat web服务器1 (未完待续)

    virtualbox搭建ubuntu server nginx+mysql+tomcat web服务器1 (未完待续) 第一次接触到 linux,不知道linux的确很强大,然后用virtualbox ...

  7. linux系统下搭建自己的web服务器

    之前在windows 2008 server上搭建了一个用于测试的web服务器,但是在打开网站的时候特别的慢,尤其是图片的加载都会失败,当时以为是路径的问题,但是在服务器上自己打开都特别慢,自己实在找 ...

  8. (总结)CentOS Linux搭建SVN Server配置详解

         PS:虽然在公司linux服务器上搭建过几次svn,但是时间长了,有些配置操作会忘掉,上网搜索的结果都不大满意,有幸在前几天看到一篇算是最满意的svn搭建文章,转载一下以备以后使用,原文地址 ...

  9. jexus asp.net Linux Web Server

    Jexus简介 Jexus web server for linux 是运行在Linux上的Web服务器.其安装和部署及其简单,直接支持Asp.net . 下载Jexus wget http://li ...

随机推荐

  1. Vue 组件 data为什么是函数?

    在创建或注册模板的时候,传入一个data属性作为用来绑定的数据.但是在组件中,data必须是一个函数,而不能直接把一个对象赋值给它. Vue.component('my-component', { t ...

  2. 想要快速上手 Spring Boot?看这些教程就足够了!| 码云周刊第 81 期

    原文:https://blog.gitee.com/2018/08/19/weekly-81/ 想要快速上手 Spring Boot?看这些教程就足够了!| 码云周刊第 81 期 码云周刊 | 201 ...

  3. use of undeclared identifier 'xxxxxxx方法名'

    在*.m文件中,编写一个方法,出现了 use of undeclared identifier 'xxxx方法名'.   遇到这种情况: 首先要看,*.h 文件是否定义了该方法. 其次,要检查一下,方 ...

  4. 重载 UINavigationController 设置左侧返回按钮的文字为图片

    UINavigationController 导航栏控制器的左侧返回按钮如果需要设置成图片,仅使用系统的是无法实现的,需要重载系统的导航栏控制器,在控制器推出之前替换掉leftBarButtonIte ...

  5. Eclipse默认快捷键指南

    Eclipse 是一个开放源代码的.基于Java的可扩展开发平台,包含一个框架和一组服务,用于通过插件组件构建开发环境,附带了一个标准的插件集(包括Java开发工具Java Development K ...

  6. 26个Jquery1.4使用小技巧

    1. 禁止右键点击 1.       $(document).ready(function(){ 2.           $(document).bind("contextmenu&quo ...

  7. 关于SpringCloud微服务架构概念的一点理解

    目前微服务是非常火的架构或者说概念,也是在构建大型互联网项目时采用的架构方式. 1.单体架构单体架构,是指将开发好的项目打成war包,然后发布到tomcat等容器中的应用. 假设你正准备开发一款与Ub ...

  8. 简明python教程 --C++程序员的视角(六):输入输出IO

    程序与用户交互 你会从用户那里得到输入,然后打印一些结果.我们可以分别使用raw_input,input和print语句来完成这些功能.raw_input会返回字符串,而input会返回字面值,相当于 ...

  9. scala编程第17章学习笔记(2)——集和映射

    默认情况下在使用“Set”或“Map”的时候,获得的都是不可变对象.如果需要的是可变版本,需要先写明引用. 如果同一个源文件中既要用到可变版本,也要用到不可变版本的集合或映射,方法之一是引用包含了可变 ...

  10. 混沌数学之logistic模型

    logistic回归又称logistic回归分析,主要在流行病学中应用较多,比较常用的情形是探索某疾病的危险因素,根据危险因素预测某疾病发生的概率. 相关DEMO参见:混沌数学之离散点集图形DEMO ...