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

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資源。
 
上文已經(jīng)交待了gSOAPLinux環(huán)境下的編譯方法和客戶端的實(shí)例程序,本文繼續(xù)講解其服務(wù)端程序的開(kāi)發(fā)。由于不可能獲得真正的數(shù)據(jù)庫(kù)內(nèi)容,我們?cè)O(shè)定的目標(biāo)是,所有返回的內(nèi)容都是客戶端傳入的股票代碼。
 
首先,在gsoap-2.7/gsoap/wsdl/下創(chuàng)建一個(gè)stock_server目錄
-bash-3.2$ mkdir -p stock_server
 
改變當(dāng)前路徑為stock_server
-bash-3.2$ cd stock_server
 
仍然使用wsdl2h生成基于純C代碼的stock.h
-bash-3.2$ ../wsdl2h -c -o stock.h http://webservice.webxml.com.cn/WebServices/ChinaStockWebService.asmx?wsdl
 
然后,生成服務(wù)端存根程序,并且不生成xml文件和soapServerLib.c
-bash-3.2$ ../../bin/linux386/soapcpp2 -S -L -x 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 soapServer.c server request dispatcher
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.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.nsmap namespace mapping table
 
Compilation successful
 
服務(wù)端的主程序稍微比客戶端復(fù)雜些,因?yàn)檫€要處理客戶端的其他請(qǐng)求,至少要有其函數(shù)體,否則編譯時(shí)會(huì)報(bào)錯(cuò)。

#include "soapH.h"
#include 
"ChinaStockWebServiceSoap12.nsmap"

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

    
struct soap soap;
    soap_init(
&soap);
    
int m, s;
    
if ( (m = soap_bind(&soap, NULL, port, 100)) < 0 ) {
        soap_print_fault(
&soap, stderr);
    }
    
else {
        printf(
"Socket connect successfully: master socket = %d\n", m);
        
int i = 0;
        
while ( 1 ) {
            
if ( (s = soap_accept(&soap)) < 0 ) {
                soap_print_fault(
&soap, stderr);
                
break;
            }
            printf(
"Connection %d accepted from IP = %d.%d.%d.%d, slave socket = %d\n"++i, (soap.ip >> 24& 0xff, (soap.ip >> 16& 0xff, (soap.ip >> 8& 0xff, soap.ip & 0xff, s);
            
if ( soap_serve(&soap) != SOAP_OK ) {
                soap_print_fault(
&soap, stderr);
                
break;
            }
            soap_end(
&soap);
        }
    }
    soap_done(
&soap);
}

int __ns3__getStockInfoByCode(
    
struct soap *soap,
    
struct _ns1__getStockInfoByCode *request,
    
struct _ns1__getStockInfoByCodeResponse *response) {
    
int element_counter = 25;
    response
->getStockInfoByCodeResult = (struct ns1__ArrayOfString *) malloc(sizeof(struct ns1__ArrayOfString));
    response
->getStockInfoByCodeResult->__sizestring = element_counter;
    response
->getStockInfoByCodeResult->string = (char **) malloc(sizeof(char ** element_counter);
    
int i = 0;
    
for ( i = 0; i < element_counter; i++ ) {
        response
->getStockInfoByCodeResult->string[i] = (char *) malloc(sizeof(char* 32);
        strcpy(response
->getStockInfoByCodeResult->string[i], request->theStockCode);
    }
    
return SOAP_OK;
}

int __ns3__getStockImage_USCOREkByteByCode(
    
struct soap *soap,
    
struct _ns1__getStockImage_USCOREkByteByCode *request,
    
struct _ns1__getStockImage_USCOREkByteByCodeResponse *response) {
    
return SOAP_OK;
}

int __ns3__getStockImage_USCOREkByCode(
    
struct soap *soap,
    
struct _ns1__getStockImage_USCOREkByCode *request,
    
struct _ns1__getStockImage_USCOREkByCodeResponse *response) {
    
return SOAP_OK;
}

int __ns3__getStockImageByteByCode(
    
struct soap *soap,
    
struct _ns1__getStockImageByteByCode *request,
    
struct _ns1__getStockImageByteByCodeResponse *response) {
    
return SOAP_OK;
}

int __ns3__getStockImageByCode(
    
struct soap *soap,
    
struct _ns1__getStockImageByCode *request,
    
struct _ns1__getStockImageByCodeResponse *response) {
    
return SOAP_OK;
}

int __ns2__getStockInfoByCode(
    
struct soap *soap,
    
struct _ns1__getStockInfoByCode *request,
    
struct _ns1__getStockInfoByCodeResponse *response) {
    
int element_counter = 25;
    response
->getStockInfoByCodeResult = (struct ns1__ArrayOfString *) malloc(sizeof(struct ns1__ArrayOfString));
    response
->getStockInfoByCodeResult->__sizestring = element_counter;
    response
->getStockInfoByCodeResult->string = (char **) malloc(sizeof(char ** element_counter);
    
int i = 0;
    
for ( i = 0; i < element_counter; i++ ) {
        response
->getStockInfoByCodeResult->string[i] = (char *) malloc(sizeof(char* 32);
        strcpy(response
->getStockInfoByCodeResult->string[i], request->theStockCode);
    }
    
return SOAP_OK;
}

int __ns2__getStockImage_USCOREkByteByCode(
    
struct soap *soap,
    
struct _ns1__getStockImage_USCOREkByteByCode *request,
    
struct _ns1__getStockImage_USCOREkByteByCodeResponse *response) {
    
return SOAP_OK;
}

int __ns2__getStockImage_USCOREkByCode(
    
struct soap *soap,
    
struct _ns1__getStockImage_USCOREkByCode *request,
    
struct _ns1__getStockImage_USCOREkByCodeResponse *response) {
    
return SOAP_OK;
}

int __ns2__getStockImageByteByCode(
    
struct soap *soap,
    
struct _ns1__getStockImageByteByCode *request,
    
struct _ns1__getStockImageByteByCodeResponse *response) {
    
return SOAP_OK;
}

int __ns2__getStockImageByCode(
    
struct soap *soap,
    
struct _ns1__getStockImageByCode *request,
    
struct _ns1__getStockImageByCodeResponse *response) {
    
return SOAP_OK;
}


值得注意的是,如果項(xiàng)目中存在多個(gè)name space,最好把全部name space的相關(guān)方法都進(jìn)行編碼,否則可能出現(xiàn)意想不到的錯(cuò)誤:客戶端明明是調(diào)用ns3的方法,但是服務(wù)端卻使用了ns2的方法來(lái)提供服務(wù)。這一點(diǎn)我也比較費(fèi)解,可能與wsdl本身的寫法有關(guān)。

 

上述服務(wù)端程序的編譯命令是

gcc -O2 -o stock_server stock_server.c soapC.c soapServer.c ../../stdsoap2.c -I../.. -L../.. -lgsoap

 

同時(shí),要把上文的客戶端程序修改一下,支持指定的end point,不指定end point再取默認(rèn)的end point

#include "soapH.h"
#include 
"ChinaStockWebServiceSoap12.nsmap"

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

    
struct soap soap;
    soap_init(
&soap);
    soap_set_mode(
&soap, SOAP_C_UTFSTRING);
    
struct _ns1__getStockInfoByCode request;
    
struct _ns1__getStockInfoByCodeResponse response;

    request.theStockCode 
= argv[1];
    
char *endpoint = NULL;
    
if ( argc == 3 )
        endpoint 
= argv[2];
    
if ( soap_call___ns3__getStockInfoByCode(&soap, endpoint, 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;
}


使服務(wù)端程序在某一高位端口下運(yùn)行,比如
-bash-3.2$ ./stock_server 6883
Socket connect successfully: master socket = 3
 
另起一個(gè)窗口執(zhí)行客戶端程序,并且指定end point
-bash-3.2$ ./stock sh600000 http://localhost:6883
Stock code        : sh600000
Stock name        : sh600000
Timestamp         : sh600000
Latest price      : sh600000
Closing price T-1 : sh600000
Opening price     : sh600000
Ups and downs     : sh600000
Mininum price     : sh600000
Maxinum price     : sh600000
Amount of up/down : sh600000
Trading volume    : sh600000
Trading amount    : sh600000
Buy price         : sh600000
Sell price        : sh600000
Agency trans      : sh600000
Buy  1            : sh600000
Buy  2            : sh600000
Buy  3            : sh600000
Buy  4            : sh600000
Buy  5            : sh600000
Sell 1            : sh600000
Sell 2            : sh600000
Sell 3            : sh600000
Sell 4            : sh600000
Sell 5            : sh600000
 
成功!

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            久久一区二区三区四区| 香蕉av777xxx色综合一区| 久久久夜色精品亚洲| 性视频1819p久久| 国产视频亚洲| 你懂的视频欧美| 欧美成人a∨高清免费观看| 亚洲久久一区二区| 日韩网站在线观看| 国产精品视频免费观看| 欧美在线91| 老司机aⅴ在线精品导航| 日韩视频免费观看高清在线视频 | 亚洲人成艺术| 一区二区三区日韩精品| 国产欧美日韩三级| 免费欧美网站| 欧美三级电影网| 久久精品成人一区二区三区蜜臀| 久久久国产精品一区二区三区| 狠狠久久亚洲欧美| 亚洲欧洲综合另类在线| 国产精品视频内| 欧美bbbxxxxx| 国产精品国码视频| 亚洲免费av网站| 亚洲激情在线视频| 亚洲麻豆一区| 黄色成人免费观看| 激情综合网址| 亚洲精品国产系列| 狠狠色综合网| 亚洲一区二区三区激情| 亚洲第一福利视频| 亚洲在线观看免费| 日韩午夜一区| 久久精品国产第一区二区三区最新章节| 日韩亚洲成人av在线| 欧美影院成人| 午夜精品久久久久久久蜜桃app| 免费在线国产精品| 久久综合九色综合欧美狠狠| 国产精品国产馆在线真实露脸| 老司机午夜精品视频在线观看| 国产精品成人一区二区网站软件 | 一区二区三区在线高清| 亚洲一区在线直播| 中国成人亚色综合网站| 免费视频最近日韩| 蜜臀av国产精品久久久久| 国产女精品视频网站免费| 日韩视频在线你懂得| 亚洲精品日产精品乱码不卡| 欧美一区二区三区久久精品| 亚洲欧美日韩视频二区| 欧美日韩一区二区三区免费| 亚洲国产欧美另类丝袜| 1000部国产精品成人观看| 久久av老司机精品网站导航| 欧美一区1区三区3区公司| 欧美午夜精品一区| 一区二区日韩欧美| 亚洲尤物在线| 国产精品伦一区| 在线一区免费观看| 午夜电影亚洲| 国产精品一区二区三区四区| 亚洲一区二区三区涩| 小嫩嫩精品导航| 国产日产欧产精品推荐色| 亚洲免费在线观看视频| 欧美一级视频| 国产一区二区三区久久| 久久精品中文字幕一区| 免费亚洲电影| 日韩亚洲欧美在线观看| 欧美日韩国产区一| 一区二区三区四区蜜桃| 亚洲免费一级电影| 国产亚洲欧美aaaa| 久久综合网色—综合色88| 亚洲国产精品电影在线观看| 99综合电影在线视频| 国产精品wwwwww| 欧美在线观看视频一区二区| 美国成人直播| 99成人在线| 国产精品久久中文| 久久久久欧美精品| 亚洲精美视频| 性久久久久久久| 极品av少妇一区二区| 欧美国产日本在线| 亚洲午夜视频在线观看| 久久久福利视频| 91久久极品少妇xxxxⅹ软件| 欧美性大战久久久久| 欧美在线亚洲一区| 亚洲精品国产无天堂网2021| 欧美激情一区二区三区在线视频观看| 亚洲经典在线看| 欧美一区二区三区男人的天堂| 韩日成人在线| 欧美视频成人| 久久性天堂网| 亚洲免费一在线| 亚洲国产欧美日韩精品| 午夜在线观看欧美| 亚洲国产日韩一区| 国产日韩一区二区三区| 欧美精品久久久久久久免费观看 | 欧美日韩高清在线播放| 久久成人免费电影| 一区二区久久久久久| 免费日韩视频| 久久国产精品亚洲77777| 一区二区高清视频| 伊人春色精品| 国产欧美日韩不卡| 欧美性猛交xxxx乱大交退制版| 久久嫩草精品久久久久| 亚洲欧美欧美一区二区三区| 亚洲精品久久久久久久久久久| 久久久999精品| 亚洲欧美一区二区视频| av不卡在线观看| 亚洲成人影音| 亚洲国产精品精华液网站| 国产一区二区成人久久免费影院| 欧美午夜精品一区二区三区| 欧美精品在线一区二区| 欧美成人国产va精品日本一级| 欧美一级淫片播放口| 亚洲在线视频| 亚洲视频一二| 亚洲少妇自拍| 在线一区视频| 亚洲视频在线二区| 在线一区欧美| 亚洲一区日韩| 香蕉久久夜色精品国产| 性欧美超级视频| 欧美一区亚洲二区| 欧美永久精品| 久久激情一区| 久久在线播放| 欧美本精品男人aⅴ天堂| 乱中年女人伦av一区二区| 久久综合狠狠综合久久综青草 | 亚洲高清在线精品| 亚洲国产福利在线| 99re在线精品| 在线一区亚洲| 欧美一区二区精美| 久久激情视频免费观看| 久久亚洲精品一区二区| 免费日韩av| 欧美日韩亚洲高清| 国产精品毛片高清在线完整版| 国产麻豆精品久久一二三| 国产一区二区三区在线免费观看 | 你懂的视频一区二区| 欧美精品九九| 国产免费亚洲高清| 狠狠色综合日日| 亚洲美女精品一区| 亚洲女性裸体视频| 久久国产精品高清| 欧美第一黄网免费网站| 亚洲破处大片| 亚洲欧美日韩一区在线| 另类酷文…触手系列精品集v1小说| 欧美1区2区| 国产精品自拍小视频| 午夜激情一区| 欧美黄色日本| 国产欧美激情| 亚洲免费播放| 久久青草福利网站| 亚洲日本免费电影| 欧美在线一级视频| 欧美日韩国产欧| 黄网动漫久久久| 中文一区二区| 麻豆av一区二区三区久久| 99香蕉国产精品偷在线观看| 欧美中在线观看| 欧美揉bbbbb揉bbbbb| 极品av少妇一区二区| 亚洲欧美在线看| 91久久久久久| 午夜一级久久| 欧美性做爰毛片| 亚洲精品色婷婷福利天堂| 欧美在线视频不卡| 亚洲精品久久久久中文字幕欢迎你 | 欧美一级免费视频| 亚洲精品一区二区三区福利| 久久久女女女女999久久| 国产精品毛片大码女人|