《综合实验—— 基于webservice的嵌入式计算器的设计》由会员分享,可在线阅读,更多相关《综合实验—— 基于webservice的嵌入式计算器的设计(11页珍藏版)》请在金锄头文库上搜索。
1、综合实验 基于 webservice 的嵌入式计算器的设计实验目的:1、加深对 gSOAP WebService 客户端和服务器端通信基本过程和方法的理解;2、掌握嵌入式软件开发的一般流程。实验内容:要求:1、掌握 C 语言基础知识;2、掌握 Linux 环境下 vi 编辑器的使用方法;3、掌握 Makefile 的编写和使用方法;4、掌握 Linux 下的程序编译与交叉编译过程;实验内容与分析设计:所需硬件环境:1、博创 UP-CPU6410 教学及科研平台;2、PC 机 pentium500 以上,硬盘 40G 以上,内存 512MB 以上;所需软件环境:1、4.3.1-eabi-armv
2、6-up-cup6410.tar.gz 交叉编译器2、gsoap_linux_2.7.9e.tar.gz 压缩包设计过程:1、解压 4.3.1-eabi-armv6-up-cup6410.tar.gz 软件包,搭建编译环境;2、解压缩 gsoap_linux_2.7.9e.tar.gz 软件包;3、进入解压后的 gsoap_linux_2.7 目录下,进入 samples 下,新建 calc目录,在 calc 目录下,编写相应的客户端程序,服务器端程序,头文件和makefile 文件。4、执行 make,生成相应的可执行程序;5、挂载开发板,运行测试。实验步骤:1、 用 mkdir 新建一个
3、基于 webservice 的嵌入式计算器的设计的文件夹,然后把资料压缩包放入里面,进行解压缩rootbogon # mkdir 基于 webservice 的嵌入式计算器的设计rootbogon # cd 基于 webservice 的嵌入式计算器的设计 /rootbogon 基于 webservice 的嵌入式计算器的设计# lsgsoap_linux_2.7.9e.tar.gzrootbogon 基于 webservice 的嵌入式计算器的设计# tar -xzvf gsoap_linux_2.7.9e.tar.gz2、 用 cd 命令进入刚刚解压缩好的 gsoap-linux-2.7
4、文件夹下,然后打开 samples文件夹,找到文件夹中的 calc 文件,点击打开rootbogon 基于 webservice 的嵌入式计算器的设计# lsgsoap-linux-2.7 gsoap_linux_2.7.9e.tar.gzrootbogon 基于 webservice 的嵌入式计算器的设计# cd gsoap-linux-2.7/rootbogon gsoap-linux-2.7# cd samples/rootbogon samples# cd calc/3、 开始编写 calc.h 文件rootbogon calc# gedit calc.h4、 编写开始编写 calcs
5、erver.c 文件rootbogon calc# gedit calcserver.c5、 编写开始编写 calcclient.c 文件rootbogon calc# gedit calcclient.c6、 编写此程序的 Makefile 文件rootbogon calc# gedit Makefile7、 用 make 编译 Makefile 文件 rootlocalhost calc# make8、 运行可执行程序 calcserver.c rootbogon calc# ./calcserver 8080可以看到如下结果Socket connection successful: ma
6、ster socket = 3表示已经执行成功9、 打开网络浏览器,在上面输入网址处输入目的机的 IP 和端口号http:/192.168.1.103:8080/10、在终端上面显示 Socket connection successful: slave socket = 4 表示已经连接成功11、再打开另一个终端,进入 基于 webservice 的嵌入式计算器的设计/gsoap-linux-2.7/samples/calc/文件夹下,运行 calclient 执行文件rootbogon calc# ./calcclient a 6 2result = 8rootbogon calc# ./
7、calcclient s 6 2result = 4rootbogon calc# ./calcclient d 6 2result = 3rootbogon calc# ./calcclient p 6 2result = 36实验结果:服务器端rootbogon calc# ./calcserver 8080Socket connection successful: master socket = 3Socket connection successful: slave socket = 4Socket connection successful: slave socket = 4Sock
8、et connection successful: slave socket = 4Socket connection successful: slave socket = 4Socket connection successful: slave socket = 4Socket connection successful: slave socket = 4客户端rootbogon calc# ./calcclient a 6 2result = 8rootbogon calc# ./calcclient s 6 2result = 4rootbogon calc# ./calcclient
9、d 6 2result = 3rootbogon calc# ./calcclient p 6 2result = 36疑难小结:没有用开放板进行交叉编译,对于这个实验来说,降低了好多难度,但是最主要的这里面就是要把 calcclient.c 里面的网络连接 IP 端口号改为你所需要连接的目地机上面的 IP 和端口号,然后如果要是交叉编译的话 还要改动 Makefile文件实验算法:头文件 calc.hint ns_add(double a, double b, double *result);int ns_sub(double a, double b, double *result);int
10、 ns_mul(double a, double b, double *result);int ns_div(double a, double b, double *result);int ns_pow(double a, double b, double *result);服务器端 calcserver.c#include soapH.h#include calc.nsmapint main(int argc, char *argv) int m, s; /* master and slave sockets */struct soap soap;soap_init(if (argc Can
11、t divide %f by %f, a, b);return soap_sender_fault(soap, Division by zero, s);return SOAP_OK; int ns_pow(struct soap *soap, double a, double b, double *result) *result = pow(a, b);if (soap_errno = EDOM) /* soap_errno is like errno, but compatible with Win32 */ char *s = (char*)soap_malloc(soap, 1024)
12、;sprintf(s, Cant take the power of %f to %f, a, b);sprintf(s, Cant take power of %f to %f, a, b);return soap_sender_fault(soap, Power function domain error, s);return SOAP_OK;客户端 calcclient.c#include soapH.h#include calc.nsmapconst char server = http:/192.168.1.103:8080;int main(int argc, char *argv
13、) struct soap soap;double a, b, result;if (argc 4) fprintf(stderr, Usage: add|sub|mul|div|pow num numn);exit(0);soap_init(a = strtod(argv2, NULL);b = strtod(argv3, NULL);switch (*argv1) case a:soap_call_ns_add(break;case s:soap_call_ns_sub(break;case m:soap_call_ns_mul(break;case d:soap_call_ns_div(
14、break;case p:soap_call_ns_pow(break; default:fprintf(stderr, Unknown commandn);exit(0);if (soap.error) soap_print_fault(exit(1);elseprintf(result = %gn, result);soap_destroy(soap_end(soap_done(return 0;Makefile 文件GSOAP=././bin/soapcpp2SOAPH=././stdsoap2.hSOAPC=././stdsoap2.cSOAPCPP=././stdsoap2.cppC
15、C=gccCPP=g+LIBS=COFLAGS=-O2CWFLAGS=-WallCIFLAGS=-I./.CMFLAGS=CFLAGS= $(CWFLAGS) $(COFLAGS) $(CIFLAGS) $(CMFLAGS)all: calcclient calcservercalcclient: calc.h calcclient.c $(SOAPH) $(SOAPC)$(GSOAP) -c calc.h$(CC) $(CFLAGS) -o calcclient calcclient.c soapC.c soapClient.c $(SOAPC) $(LIBS)calcserver: calc.h calcserver.c $(SOAPH) $(SOAPC)$(GSOAP) -c calc.h$(CC) $(CFLAGS) -o calcserver calcserver.c soapC.c soapServer.c $(SOAPC) -lm $(LIBS)clean:rm -f *.o soapH.h soapStub.h soapC.cpp soapC.c soapClient.cpp soapClient.c soapServer.cpp soapServer.c soap*Proxy.hdistclean:rm -f *.o *.wsdl *.xs