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

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>
            噜噜爱69成人精品| 国产日韩av高清| 亚洲深夜福利| 日韩亚洲欧美一区二区三区| 亚洲欧洲一区二区在线观看| 欧美激情一区二区三区蜜桃视频| 久久精品系列| 免费永久网站黄欧美| 欧美激情视频在线免费观看 欧美视频免费一 | 亚洲国产导航| 91久久国产综合久久| 日韩亚洲欧美一区| 欧美一区91| 麻豆精品视频在线| 欧美日韩一区二区三区四区五区| 国产伦精品一区二区三区视频孕妇| 韩日精品视频| 一级日韩一区在线观看| 久久av红桃一区二区小说| 欧美成人69av| 亚洲一区欧美一区| 欧美成人精品在线视频| 国产精品网红福利| 亚洲国产成人久久| 亚洲综合精品一区二区| 美女图片一区二区| 亚洲一区二区三区激情| 久久综合激情| 国产精品视频内| 亚洲三级影片| 久久久久五月天| 亚洲日本中文| 久久理论片午夜琪琪电影网| 国产精品s色| 日韩视频永久免费观看| 久久精品女人的天堂av| 一区二区高清在线| 久久综合九色九九| 国产精品视频免费一区| 一本色道久久综合亚洲精品婷婷 | 国内久久精品视频| 亚洲欧美成人一区二区三区| 老色鬼精品视频在线观看播放 | 性做久久久久久久免费看| 欧美日韩亚洲一区二区三区| 黄色成人在线免费| 欧美亚洲免费在线| 日韩视频第一页| 麻豆亚洲精品| 伊人久久大香线蕉综合热线| 性欧美暴力猛交另类hd| 一本色道久久综合亚洲精品按摩 | 亚洲综合视频一区| 免费看成人av| 在线观看欧美黄色| 欧美中文字幕视频在线观看| 这里只有精品丝袜| 欧美日韩1区2区3区| 亚洲欧洲一区二区在线播放| 欧美成人免费在线观看| 久久久久久69| 国产一区二区中文字幕免费看| 午夜精品久久久久久久久| 一区二区免费在线观看| 欧美日韩和欧美的一区二区| 99精品国产99久久久久久福利| 欧美激情亚洲另类| 欧美承认网站| 99精品欧美一区二区三区综合在线| 欧美大片一区二区| 欧美精品日韩| 亚洲欧美99| 欧美伊久线香蕉线新在线| 国产伦精品一区二区三区视频孕妇| 午夜视频精品| 久久精品色图| 亚洲精品一二三区| 日韩视频精品| 一区二区欧美日韩| 国产精品一区二区三区久久久| 欧美亚洲在线播放| 欧美制服丝袜| 亚洲风情亚aⅴ在线发布| 欧美激情在线有限公司| 欧美日韩麻豆| 久久久天天操| 欧美77777| 午夜在线播放视频欧美| 久久不射2019中文字幕| 亚洲人成精品久久久久| 亚洲精品社区| 国产一区二区高清视频| 欧美成人免费全部| 国产精品v片在线观看不卡| 韩国一区二区三区在线观看| 亚洲第一福利社区| 欧美日韩国产精品专区| 午夜伦理片一区| 另类国产ts人妖高潮视频| 国产精品99久久久久久有的能看 | 99re6这里只有精品| 亚洲伦理久久| 亚洲国产二区| 欧美在线不卡| 欧美黄色小视频| 久久av老司机精品网站导航| 另类尿喷潮videofree| 亚洲午夜性刺激影院| 欧美中日韩免费视频| 亚洲一区二区欧美| 六十路精品视频| 欧美在线免费播放| 欧美日韩四区| 欧美大片在线看免费观看| 国产女人水真多18毛片18精品视频| 欧美激情精品久久久久久久变态| 国产精品成人aaaaa网站| 欧美sm视频| 国产日韩欧美不卡| 亚洲天堂久久| 一区二区av在线| 欧美成人蜜桃| 欧美阿v一级看视频| 国产亚洲精品一区二区| 99伊人成综合| 99综合在线| 欧美激情 亚洲a∨综合| 久久在线91| 精品成人在线视频| 久久一日本道色综合久久| 国产精品久久久亚洲一区 | 欧美激情精品| 另类天堂视频在线观看| 国产偷国产偷精品高清尤物| 亚洲无人区一区| 亚洲香蕉网站| 欧美精品日韩精品| 亚洲精品免费网站| 亚洲精品久久| 欧美不卡视频一区| 免费在线成人av| 亚洲电影自拍| 久久综合九色| 亚洲二区视频| 99re成人精品视频| 欧美人成在线视频| 一本综合久久| 久久爱www久久做| 国产亚洲精品一区二区| 欧美一区二区在线观看| 久久综合激情| 亚洲国产天堂久久综合| 免费观看亚洲视频大全| 亚洲精品国精品久久99热一| 日韩写真在线| 国产精品久久综合| 欧美在线观看视频一区二区三区| 久久精品国产精品亚洲精品| 激情一区二区三区| 老司机一区二区| 亚洲激情综合| 亚洲欧美日韩综合aⅴ视频| 韩国在线一区| 欧美日韩国产色视频| 亚洲在线观看| 久久尤物视频| 亚洲欧美日韩第一区| 羞羞视频在线观看欧美| 国产欧美一区二区三区国产幕精品 | 精品69视频一区二区三区| 美女日韩欧美| 这里只有精品电影| 久久久久久**毛片大全| 亚洲精品少妇| 国产欧美精品在线| 欧美α欧美αv大片| 亚洲五月婷婷| 亚洲福利视频在线| 欧美在线国产| 亚洲精品欧美激情| 国产色综合天天综合网| 欧美高清视频一区二区三区在线观看 | 欧美一区二区啪啪| 亚洲激情第一区| 欧美亚洲在线播放| 亚洲精品久久久久久一区二区| 国产精品久久久一区二区| 久久一区二区精品| 一区二区三区黄色| 欧美激情一区二区三区| 欧美一区国产二区| 中文欧美字幕免费| 在线国产日韩| 国产欧美一区二区精品仙草咪| 欧美裸体一区二区三区| 欧美成人久久| 欧美ed2k| 久久综合九色综合久99| 性久久久久久久久| 亚洲性视频h|