〖Linux〗使用gsoap搭建web server(C)
发布日期:2021-08-31 16:58:47 浏览次数:5 分类:技术文章

本文共 3812 字,大约阅读时间需要 12 分钟。

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 
#include
intmain (int argc, char *argv[]){ int m, s; struct soap add_soap; soap_init (&add_soap); if (argc < 2) { printf ("usage: %s
\n", argv[0]); exit (1); } else { m = soap_bind (&add_soap, NULL, atoi (argv[1]), 100); if (m < 0) { soap_print_fault (&add_soap, stderr); exit (-1); } fprintf (stderr, "Socket connection successful: master socket = %d\n",m); for (;;) { s = soap_accept (&add_soap); if (s < 0) { soap_print_fault (&add_soap, stderr); exit (-1); } fprintf (stderr, "Socket connection successful: slave socket = %d\n", s); soap_serve (&add_soap); //该句说明该server的服务 soap_end (&add_soap); } } return 0;}intns__add (struct soap *add_soap, int num1, int num2, int *sum){ *sum = num1 + num2; return 0;}

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

#include "soapH.h"#include "calc.nsmap"                           /* 与add.h的第一行命名空间(ns)有关 */#include 
#include
int add (const char *server, int num1, int num2, int *sum);intmain (int argc, char **argv){ int result = -1; char *server = "http://localhost:4567"; /* 定义server */ int num1 = 0; int num2 = 0; int sum = 0; if (argc < 3) /* 判断传入参数 */ { printf ("usage: %s num1 num2 \n", argv[0]); exit (0); } num1 = atoi (argv[1]); num2 = atoi (argv[2]); result = add (server, num1, num2, &sum); /* 执行add() */ if (result != 0) /* 输出result */ { printf ("soap err,errcode = %d\n", result); } else { printf ("%d+%d=%d\n", num1, num2, sum); } return 0;}intadd (const char *server, int num1, int num2, int *sum){ struct soap add_soap; /* 创建add_soap()结构体 */ int result = 0; 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 allOBJ_NS := calcOBJ_NAME := addGSOAP_ROOT := /home/scue/work/gsoap_2.8.15/gsoapINCLUDE := -I$(GSOAP_ROOT)CC := clangGCC := clang#CC := arm-linux-gcc#GCC := arm-linux-gccOBJ_SERVER := soapC.o stdsoap2.o soapServer.o $(OBJ_NAME)server.oOBJ_CLIENT := soapC.o stdsoap2.o soapClient.o $(OBJ_NAME)client.oall: server client server: $(OBJ_SERVER)    $(CC) $(INCLUDE) $^ -o $@client: $(OBJ_CLIENT)    $(CC) $(INCLUDE) $^ -o $@.PHONY:soapsoap:    @cp -v $(GSOAP_ROOT)/stdsoap2.* .    @$(GSOAP_ROOT)/bin/linux386/soapcpp2 -c $(OBJ_NAME).h# -c 表示生成c文件.PHONY:cleanclean:    rm -f server client *.odistclean:    rm -f server client *.o ns* soap* *.xml *.nsmap *.wsdl stdsoap2.*

  5) 编译及验证

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

 参考文章:

  1.

转载地址:https://blog.csdn.net/weixin_34082789/article/details/85590614 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:向上弹出菜单jQuery插件
下一篇:转GetCallbackEventReference 实现回调

发表评论

最新留言

不错!
[***.144.177.141]2024年04月04日 19时05分33秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章