青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

The power of C, the power of MD

A problem is a chance to do your best
posts - 11, comments - 22, trackbacks - 0, articles - 0
  C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理
電信provisioning系統(tǒng)中,常常需要與遠(yuǎn)程服務(wù)器實(shí)時(shí)交換一些數(shù)據(jù),以完成用戶的請(qǐng)求。由于簡(jiǎn)單對(duì)象訪問(wèn)協(xié)議(Simple Object Access Protocol, SOAP)的流行,許多涉及到第三方的應(yīng)用,我們一般都比較樂(lè)意使用SOAP來(lái)開(kāi)發(fā)。不過(guò),由于可能涉及到公司的機(jī)密,本系列教程的開(kāi)發(fā)實(shí)例盡量采用在網(wǎng)上已經(jīng)公開(kāi)的Web Service資源。
 
gSOAP是一套開(kāi)源的C/C++軟件工具包,使用它能夠很方便地開(kāi)發(fā)SOAP網(wǎng)頁(yè)服務(wù)和基于XML的應(yīng)用程序,就像JAVA里面的axis。
 
首先,我們需要從以下地址下載最新版本的gSOAP 2.7.17:
https://sourceforge.net/projects/gsoap2/files/
 
其次,gSOAP依賴于Bison和Flex,編譯gSOAP的時(shí)候會(huì)用到,如果沒(méi)有,從這里下載:
Bison:http://www.gnu.org/software/bison/
Flex:http://flex.sourceforge.net/
 
關(guān)于這兩個(gè)工具包的安裝步驟可以參考最新的LFS手冊(cè):
http://www.linuxfromscratch.org/lfs/view/6.4/chapter06/bison.html
http://www.linuxfromscratch.org/lfs/view/6.4/chapter06/flex.html
 
如果不是root用戶,沒(méi)有安裝權(quán)限的話,可以在configure的時(shí)候使用--prefix=/path/to/your/own/directory,指定安裝路徑。裝好之后,修改用戶目錄的.profile文件,更改PATH和LD_LIBRARY_PATH環(huán)境變量,使得系統(tǒng)能夠正確搜索到你安裝后的可執(zhí)行文件和庫(kù)文件即可。
 
這兩步準(zhǔn)備工作完成后,我們就可以開(kāi)始編譯gSOAP。Linux下編譯安裝源代碼包無(wú)非就是tar zxvf xxx,configure,make,make install,由于我不是root用戶,沒(méi)有安裝的權(quán)限,那么不執(zhí)行make install也可以使用gSOAP開(kāi)發(fā)程序,只不過(guò)使用的時(shí)候常常需要指定路徑。
 
現(xiàn)在我們的目標(biāo)是開(kāi)發(fā)一個(gè)獲取股票信息的客戶端程序。服務(wù)端采用webxml開(kāi)發(fā)的WSDL,其URL是:http://webservice.webxml.com.cn/WebServices/ChinaStockWebService.asmx?wsdl
 
首先,在gsoap-2.7/gsoap/wsdl/下創(chuàng)建一個(gè)stock目錄
-bash-3.2$ mkdir -p stock
 
改變當(dāng)前路徑為stock
-bash-3.2$ cd stock
 
使用wsdl2h生成stock.h,如果希望生成純C代碼,需要加上-c參數(shù),否則,將會(huì)生成C++代碼
-bash-3.2$ ../wsdl2h -c -o stock.h http://webservice.webxml.com.cn/WebServices/ChinaStockWebService.asmx?wsdl
 
**  The gSOAP WSDL/Schema processor for C and C++, wsdl2h release 1.2.17
**  Copyright (C) 2000-2010 Robert van Engelen, Genivia Inc.
**  All Rights Reserved. This product is provided "as is", without any warranty.
**  The wsdl2h tool is released under one of the following two licenses:
**  GPL or the commercial license by Genivia Inc. Use option -l for more info.
 
Saving stock.h
 
Cannot open file 'typemap.dat'
Problem reading type map file 'typemap.dat'.
Using internal type definitions for C instead.
 
 
Connecting to 'http://webservice.webxml.com.cn/WebServices/ChinaStockWebService.asmx?wsdl' to retrieve WSDL/XSD...
Connected, receiving...
Done reading 'http://webservice.webxml.com.cn/WebServices/ChinaStockWebService.asmx?wsdl'
 
To complete the process, compile with:
> soapcpp2 stock.h
 
然后,使用soapcpp2生成客戶端存根程序和相關(guān)的頭文件、資源文件,由于我們只開(kāi)發(fā)客戶端程序,所以可以指定-C參數(shù)
-bash-3.2$ ../../bin/linux386/soapcpp2 -C stock.h
 
**  The gSOAP code generator for C and C++, soapcpp2 release 2.7.17
**  Copyright (C) 2000-2010, Robert van Engelen, Genivia Inc.
**  All Rights Reserved. This product is provided "as is", without any warranty.
**  The soapcpp2 tool is released under one of the following three licenses:
**  GPL, the gSOAP public license, or the commercial license by Genivia Inc.
 
Saving soapStub.h annotated copy of the input declarations
Saving soapH.h interface declarations
Saving soapC.c XML serializers
Saving soapClient.c client calling stubs
Saving soapClientLib.c client stubs with serializers (use only for libs)
Using ns2 service name: ChinaStockWebServiceSoap
Using ns2 service style: document
Using ns2 service encoding: literal
Using ns2 service location: http://webservice.webxml.com.cn/WebServices/ChinaStockWebService.asmx
Using ns2 schema namespace: http://WebXml.com.cn/ChinaStockWebServiceSoap
Saving ChinaStockWebServiceSoap.getStockImageByCode.req.xml sample SOAP/XML request
Saving ChinaStockWebServiceSoap.getStockImageByCode.res.xml sample SOAP/XML response
Saving ChinaStockWebServiceSoap.getStockImageByteByCode.req.xml sample SOAP/XML request
Saving ChinaStockWebServiceSoap.getStockImageByteByCode.res.xml sample SOAP/XML response
Saving ChinaStockWebServiceSoap.getStockImage_kByCode.req.xml sample SOAP/XML request
Saving ChinaStockWebServiceSoap.getStockImage_kByCode.res.xml sample SOAP/XML response
Saving ChinaStockWebServiceSoap.getStockImage_kByteByCode.req.xml sample SOAP/XML request
Saving ChinaStockWebServiceSoap.getStockImage_kByteByCode.res.xml sample SOAP/XML response
Saving ChinaStockWebServiceSoap.getStockInfoByCode.req.xml sample SOAP/XML request
Saving ChinaStockWebServiceSoap.getStockInfoByCode.res.xml sample SOAP/XML response
Saving ChinaStockWebServiceSoap.nsmap namespace mapping table
Using ns3 service name: ChinaStockWebServiceSoap12
Using ns3 service style: document
Using ns3 service encoding: literal
Using ns3 service location: http://webservice.webxml.com.cn/WebServices/ChinaStockWebService.asmx
Using ns3 schema namespace: http://WebXml.com.cn/ChinaStockWebServiceSoap12
Saving ChinaStockWebServiceSoap12.getStockImageByCode.req.xml sample SOAP/XML request
Saving ChinaStockWebServiceSoap12.getStockImageByCode.res.xml sample SOAP/XML response
Saving ChinaStockWebServiceSoap12.getStockImageByteByCode.req.xml sample SOAP/XML request
Saving ChinaStockWebServiceSoap12.getStockImageByteByCode.res.xml sample SOAP/XML response
Saving ChinaStockWebServiceSoap12.getStockImage_kByCode.req.xml sample SOAP/XML request
Saving ChinaStockWebServiceSoap12.getStockImage_kByCode.res.xml sample SOAP/XML response
Saving ChinaStockWebServiceSoap12.getStockImage_kByteByCode.req.xml sample SOAP/XML request
Saving ChinaStockWebServiceSoap12.getStockImage_kByteByCode.res.xml sample SOAP/XML response
Saving ChinaStockWebServiceSoap12.getStockInfoByCode.req.xml sample SOAP/XML request
Saving ChinaStockWebServiceSoap12.getStockInfoByCode.res.xml sample SOAP/XML response
Saving ChinaStockWebServiceSoap12.nsmap namespace mapping table
 
Compilation successful
 
接著,就可以利用存根程序提供的接口編寫(xiě)客戶端程序了,過(guò)程相當(dāng)簡(jiǎn)單。
#include "soapH.h"
#include 
"ChinaStockWebServiceSoap12.nsmap"

int main(int argc, char **argv) {
        
if ( argc != 2 ) {
                printf(
"Usage: %s stock_code\n", argv[0]);
                exit(
-1);
        }

        
struct soap soap;
        soap_init(
&soap);
        
struct _ns1__getStockInfoByCode request;
        
struct _ns1__getStockInfoByCodeResponse response;

        request.theStockCode 
= argv[1];
        
if ( soap_call___ns3__getStockInfoByCode(&soap, NULL, NULL, &request, &response) == SOAP_OK ) {
                
int element_counter = response.getStockInfoByCodeResult->__sizestring;
                
int i = 0;
                
for ( i = 0; i < element_counter; i++ ) {
                        
switch ( i ) {
                                
case 0  : printf("Stock code        : "); break;
                                
case 1  : printf("Stock name        : "); break;
                                
case 2  : printf("Timestamp         : "); break;
                                
case 3  : printf("Latest price      : "); break;
                                
case 4  : printf("Closing price T-1 : "); break;
                                
case 5  : printf("Opening price     : "); break;
                                
case 6  : printf("Ups and downs     : "); break;
                                
case 7  : printf("Mininum price     : "); break;
                                
case 8  : printf("Maxinum price     : "); break;
                                
case 9  : printf("Amount of up/down : "); break;
                                
case 10 : printf("Trading volume    : "); break;
                                
case 11 : printf("Trading amount    : "); break;
                                
case 12 : printf("Buy price         : "); break;
                                
case 13 : printf("Sell price        : "); break;
                                
case 14 : printf("Agency trans      : "); break;
                                
case 15 : printf("Buy  1            : "); break;
                                
case 16 : printf("Buy  2            : "); break;
                                
case 17 : printf("Buy  3            : "); break;
                                
case 18 : printf("Buy  4            : "); break;
                                
case 19 : printf("Buy  5            : "); break;
                                
case 20 : printf("Sell 1            : "); break;
                                
case 21 : printf("Sell 2            : "); break;
                                
case 22 : printf("Sell 3            : "); break;
                                
case 23 : printf("Sell 4            : "); break;
                                
case 24 : printf("Sell 5            : "); break;
                                
default : break;
                        }
                        printf(
"%s\n", response.getStockInfoByCodeResult->string[i]);
                }
        }
        
else {
                soap_print_fault(
&soap, stderr);
        }

        soap_destroy(
&soap);
        soap_end(
&soap);
        soap_done(
&soap);
        
return 0;
}

基本上都是套用差不多的格式,不清楚具體參數(shù)意義的話,可以參考soapcpp2生成的存根程序及其頭文件。把上述代碼保存為stock.c,編譯命令是:
gcc -O2 -o stock stock.c soapC.c soapClient.c ../../stdsoap2.c -I../.. -L../.. –lgsoap
 
可以看到,編譯時(shí),除了stock.c,還需要包括存根程序soapC.c和soapClient.c,以及gSOAP運(yùn)行時(shí)引擎stdsoap2.c,另外還需要指定頭文件搜索路徑、庫(kù)文件搜索路徑,以及告訴編譯器,鏈接libgsoap
 
一切正常的話,就大功告成了:
-bash-3.2$ ./stock sh600000
Stock code        : sh600000
Stock name        : 浦發(fā)銀行
Timestamp         : 2010-07-08 15:02:07
Latest price      : 13.79
Closing price T-1 : 13.76
Opening price     : 13.88
Ups and downs     : 0.03
Mininum price     : 13.73
Maxinum price     : 14.06
Amount of up/down : 0.22%
Trading volume    : 451017.84
Trading amount    : 62602.5809
Buy price         : 13.78
Sell price        : 13.79
Agency trans      : 34.07%
Buy  1            : 13.78 / 1622.88
Buy  2            : 13.77 / 687.10
Buy  3            : 13.76 / 785.00
Buy  4            : 13.75 / 1430.00
Buy  5            : 13.74 / 264.00
Sell 1            : 13.79 / 33.70
Sell 2            : 13.80 / 64.17
Sell 3            : 13.81 / 290.80
Sell 4            : 13.82 / 1318.70
Sell 5            : 13.83 / 647.70

 

http://blog.csdn.net/yui/archive/2010/07/08/5721877.aspx

Feedback

# re: 使用gSOAP開(kāi)發(fā)實(shí)例(1) 股票信息客戶端程序  回復(fù)  更多評(píng)論   

2010-08-03 08:26 by right
gSOAP的許可協(xié)議有點(diǎn)讓人糾結(jié)~

# re: 使用gSOAP開(kāi)發(fā)實(shí)例(1) 股票信息客戶端程序  回復(fù)  更多評(píng)論   

2010-08-03 09:50 by roy
@right

此話怎講?

# re: 使用gSOAP開(kāi)發(fā)實(shí)例(1) 股票信息客戶端程序  回復(fù)  更多評(píng)論   

2010-08-03 17:32 by www
@roy
gpl 或者 商業(yè)授權(quán)。
不能不掏錢(qián)用來(lái)開(kāi)發(fā)非GPL的程序

# re: 使用gSOAP開(kāi)發(fā)實(shí)例(1) 股票信息客戶端程序  回復(fù)  更多評(píng)論   

2010-08-04 09:30 by roy
@www

這樣啊,但是我在別的地方看到這段話,好像GPL并不意味著要收費(fèi)呀

使用GPL協(xié)議的代碼制作的程序并非不能拿來(lái)賣(mài)錢(qián),事實(shí)上RMS開(kāi)始自由運(yùn)動(dòng)的第一筆經(jīng)費(fèi)就是通過(guò)售賣(mài)附在磁碟上的Emacs賺來(lái)的。GPL的主要規(guī)定在于源代碼必須自由公開(kāi)。

http://www.linuxdiyf.com/viewarticle.php?id=179559

# re: 使用gSOAP開(kāi)發(fā)實(shí)例(1) 股票信息客戶端程序  回復(fù)  更多評(píng)論   

2010-08-04 09:48 by www
@roy
GPL授權(quán)的程序是可以用來(lái)賣(mài)錢(qián)的,但是你必須以GPL授權(quán)的方式公開(kāi)你產(chǎn)品的源代碼。

# re: 使用gSOAP開(kāi)發(fā)實(shí)例(1) 股票信息客戶端程序  回復(fù)  更多評(píng)論   

2010-08-04 11:35 by roy
@www

明白了,謝謝你
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲欧美影音先锋| 久久亚洲精品网站| 国产一区二区日韩精品欧美精品| 欧美人成网站| 欧美日韩色综合| 欧美日韩精品中文字幕| 国产精品theporn| 国产精品免费观看在线| 国产三级精品三级| 亚洲国产影院| 在线亚洲电影| 久久精品国产999大香线蕉| 久久婷婷久久| 亚洲精品国偷自产在线99热| 欧美成人tv| 日韩小视频在线观看专区| 在线性视频日韩欧美| 欧美一区二区三区免费看| 麻豆精品视频在线| 国产精品极品美女粉嫩高清在线| 国产综合欧美| 99香蕉国产精品偷在线观看| 午夜精品婷婷| 亚洲国产精品久久久久婷婷884 | 亚洲美女精品久久| 亚洲欧美日韩一区二区三区在线| 久久性天堂网| 国产精品黄页免费高清在线观看| 亚洲国产影院| 久久永久免费| 亚洲综合第一页| 欧美国产日本韩| 一区二区三区在线看| 亚洲欧美日韩国产另类专区| 亚洲第一精品夜夜躁人人躁| 性欧美video另类hd性玩具| 欧美麻豆久久久久久中文| 精品电影在线观看| 香蕉成人啪国产精品视频综合网| 91久久极品少妇xxxxⅹ软件| 久久精品人人做人人爽电影蜜月| 欧美日韩国产小视频在线观看| 亚洲第一免费播放区| 欧美亚洲视频在线看网址| 夜夜躁日日躁狠狠久久88av| 午夜久久99| 国产精品久久久久9999吃药| 亚洲日本电影| 欧美成人福利视频| 久久久久久久999精品视频| 国产欧美在线视频| 欧美一级视频| 亚洲一区二区在| 国产精品国产三级国产a| 日韩一级在线观看| 亚洲国产高清一区二区三区| 蜜桃av综合| 最新亚洲激情| 91久久国产精品91久久性色| 欧美大片免费| a4yy欧美一区二区三区| 亚洲三级免费| 国产精品高潮呻吟| 欧美亚洲免费电影| 午夜精品福利一区二区三区av| 国产精品久久二区二区| 午夜免费日韩视频| 欧美一区二区成人| 在线免费不卡视频| 欧美国产在线观看| 欧美日本免费一区二区三区| 亚洲视频在线二区| 亚洲视频第一页| 国产伦精品一区二区三| 久久久久久91香蕉国产| 久久亚洲国产成人| 亚洲精品一区二区三区av| 亚洲激情啪啪| 国产精品日韩在线一区| 久久国产精品99精品国产| 欧美在线影院| 国产自产2019最新不卡| 欧美福利视频| 欧美午夜不卡视频| 久久久久这里只有精品| 免费成人av在线| 亚洲在线成人| 久久久综合激的五月天| av不卡在线观看| 亚洲欧美日韩视频二区| 极品少妇一区二区三区精品视频| 亚洲国产综合91精品麻豆| 国产精品久久久久久久久久三级 | 国产精品高潮久久| 蜜桃av一区二区| 欧美日本免费一区二区三区| 欧美影视一区| 欧美国产日本韩| 欧美制服丝袜第一页| 国模一区二区三区| 国产日韩欧美精品| 欧美影院成年免费版| 韩国福利一区| 欧美高清在线视频| 亚洲第一网站免费视频| 香蕉乱码成人久久天堂爱免费| 亚洲欧洲精品一区二区三区波多野1战4 | 亚洲精品中文字幕女同| 99xxxx成人网| 亚洲国产高清视频| 国产日产欧产精品推荐色| 欧美巨乳在线观看| 欧美日韩天堂| 欧美日韩一级视频| 美女脱光内衣内裤视频久久影院| 性欧美超级视频| 亚洲电影自拍| 欧美激情第9页| 亚洲国产一成人久久精品| 亚洲精品一级| 日韩午夜在线视频| 在线一区二区三区四区| 亚洲尤物在线视频观看| 亚洲一区不卡| 亚洲第一中文字幕| 亚洲黄色免费电影| 99re这里只有精品6| 亚洲一区二区三区四区中文| 午夜久久电影网| 欧美国产国产综合| 国产精品video| 狠狠噜噜久久| 中文在线一区| 欧美日韩www| 欧美日韩一区二区三区免费| 国产精品丝袜91| 国产一区二区三区四区| 亚洲美女性视频| 欧美国产亚洲另类动漫| 欧美另类高清视频在线| 久久久夜夜夜| 国产欧美日韩免费| 欧美华人在线视频| 欧美在线视频不卡| 欧美日韩在线电影| 亚洲精品免费网站| 欧美国产精品中文字幕| 欧美伊人久久久久久久久影院| 欧美激情第8页| 国内视频一区| 久久字幕精品一区| 免费成人性网站| 亚洲国产成人91精品| 亚洲人成亚洲人成在线观看图片| 欧美高清视频在线播放| 亚洲福利视频一区| 麻豆精品在线视频| 久久精品欧美| 农夫在线精品视频免费观看| 在线视频亚洲欧美| 国产综合视频| 亚洲日本va午夜在线影院| 国产精品ⅴa在线观看h| 久久精品视频在线播放| 亚洲在线成人精品| 国产一区二区三区无遮挡| 一区二区在线看| 欧美亚洲日本一区| 国产伦精品一区二区三区高清| 久久天天躁狠狠躁夜夜爽蜜月| 浪潮色综合久久天堂| 亚洲欧美在线高清| 久久天天躁狠狠躁夜夜爽蜜月| 国产农村妇女精品一二区| 久久一区二区三区四区五区| 麻豆久久精品| 亚洲人成小说网站色在线| 欧美新色视频| 久久综合影视| 欧美日韩一区二区精品| 久久天堂国产精品| 国产日韩精品在线播放| 国产精品久久久久久久7电影| 亚洲少妇在线| 欧美大片一区二区三区| 欧美制服丝袜第一页| 欧美区二区三区| 亚洲日韩欧美视频| 欧美精彩视频一区二区三区| 在线观看91精品国产入口| 夜夜嗨av一区二区三区| 伊人色综合久久天天| 亚洲综合色自拍一区| 99re亚洲国产精品| 欧美国产精品中文字幕| 亚洲高清视频在线| 国产一区在线观看视频| 午夜精品一区二区在线观看| 久久国产精品第一页| 最新中文字幕亚洲|