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

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++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理
電信provisioning系統中,常常需要與遠程服務器實時交換一些數據,以完成用戶的請求。由于簡單對象訪問協議(Simple Object Access Protocol, SOAP)的流行,許多涉及到第三方的應用,我們一般都比較樂意使用SOAP來開發。不過,由于可能涉及到公司的機密,本系列教程的開發實例盡量采用在網上已經公開的Web Service資源。
 
上一節,講解了用iconv解決gSOAP輸出的中文文本亂碼的問題。在本節中,我們用一個天氣預報客戶端的例子,簡述一下gSOAP輸入的中文文本亂碼的問題。
 
Webxml.com.cn提供的天氣預報web服務,endpoint地址是:http://webservice.webxml.com.cn/WebServices/WeatherWebService.asmx,大家可以點擊進去,查看一下該服務的所有對外提供的接口。其中,利用getWeatherbyCityName接口,可以按給定的城市名字查詢該城市的天氣預報,如果輸入的城市名字不能識別,將統一返回北京的天氣預報。
 
根據前三節的內容,我們可以很快地準備好其客戶端存根程序:
1.     mkdir –p weather
2.     cd weather
3.     ../wsdl2h -c -o weather.h
http://webservice.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl
4.     ../../bin/linux386/soapcpp2 –C –L –x weather.h
 
由于程序并不復雜,直接給出其源代碼:
#include <iconv.h>

#include 
"soapH.h"
#include 
"WeatherWebServiceSoap12.nsmap"

#define OUTPUT_LEN 2048

int conv_charset(const char *dest, const char *src, char *input, size_t ilen, char *output, size_t olen) {
    iconv_t conv 
= iconv_open(dest, src);
    
if ( conv == (iconv_t) -1 )
        
return -1;
    memset(output, 
0, olen);
    
if ( iconv(conv, &input, &ilen, &output, &olen) )
        
return -1;
    iconv_close(conv);
    
return 0;
}

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

    
struct soap soap;
    soap_init(
&soap);
    soap_set_mode(
&soap, SOAP_C_UTFSTRING);

    
struct _ns1__getWeatherbyCityName request;
    
struct _ns1__getWeatherbyCityNameResponse response;

    size_t ilen 
= strlen(argv[1]);
    
char output[OUTPUT_LEN];
    
if ( conv_charset("UTF-8""GBK", argv[1], ilen, output, OUTPUT_LEN) )
        request.theCityName 
= argv[1];
    
else
        request.theCityName 
= output;

    
char *endpoint = NULL;
    
if ( argc == 3 )
        endpoint 
= argv[2];
        
if ( soap_call___ns3__getWeatherbyCityName(&soap, endpoint, NULL, &request, &response) == SOAP_OK ) {
        
int element_counter = response.getWeatherbyCityNameResult->__sizestring;
        
int i = 0;
        
for ( i = 0; i < element_counter; i++ ) {
            
switch ( i ) {
                
case 0  : printf("Province          : "); break;
                
case 1  : printf("City              : "); break;
                
case 2  : printf("City code         : "); break;
                
case 3  : printf("City pic. name    : "); break;
                
case 4  : printf("Timestamp         : "); break;
                
case 5  : printf("Temp. of today    : "); break;
                
case 6  : printf("Summary           : "); break;
                
case 7  : printf("Wind              : "); break;
                
case 8  : printf("Icon 1            : "); break;
                
case 9  : printf("Icon 2            : "); break;
                
case 10 : printf("Description       : "); break;
                
case 11 : printf("Reserved          : "); break;
                
case 12 : printf("Temp. of tomorrow : "); break;
                
case 13 : printf("Summary           : "); break;
                
case 14 : printf("Wind              : "); break;
                
case 15 : printf("Icon 1            : "); break;
                
case 16 : printf("Icon 2            : "); break;
                
case 17 : printf("Temp. of af. tmr. : "); break;
                
case 18 : printf("Summary           : "); break;
                
case 19 : printf("Wind              : "); break;
                
case 20 : printf("Icon 1            : "); break;
                
case 21 : printf("Icon 2            : "); break;
                
case 22 : printf("Introduction      : "); break;
                
default : break;
            }
            ilen 
= strlen(response.getWeatherbyCityNameResult->string[i]);
            
if ( conv_charset("GBK""UTF-8", response.getWeatherbyCityNameResult->string[i], ilen, output, OUTPUT_LEN) )
                printf(
"%s\n", response.getWeatherbyCityNameResult->string[i]);
            
else
                printf(
"%s\n", output);
        }
    }
    
else {
        soap_print_fault(
&soap, stderr);
    }

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


編譯命令是:gcc -O2 -o weather weather.c soapC.c soapClient.c ../../stdsoap2.c -I../.. -L../.. –lgsoap

 

基本上與上一節的股票信息客戶端差不多,唯一不同的是,作為輸入參數的城市名字,首先需要iconv轉換編碼,從GBK轉到UTF-8,才可以提交給服務端。各位可以試一下,不作轉換的話,無論輸入什么,服務端只會返回北京的天氣預報,因為傳入的參數在服務端產生了亂碼。

 

以下為正常的執行結果,輸入廣州,可以得到廣州的天氣預報:


如上圖,最后一段的介紹也出現了亂碼,不過我認為這是putty的問題,行末的最后一個全角字符,如果只能顯示一半的話,下一行開始將產生亂碼,如果再遇到一個半角字符,又能顯示正常了。

http://blog.csdn.net/yui/archive/2010/07/23/5758906.aspx
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲一区二区三区视频播放| 午夜精品久久久久久久99樱桃| 久久久久一区二区三区四区| 好看的av在线不卡观看| 久久久久久久精| 久久精品国产96久久久香蕉| 激情av一区二区| 亚洲高清三级视频| 欧美岛国在线观看| 亚洲一区二区少妇| 性久久久久久久久| 亚洲国产高清自拍| 夜夜夜久久久| 国产午夜精品全部视频在线播放 | 国产日韩欧美一区二区三区四区| 午夜精品福利视频| 欧美在线视频一区| 亚洲欧洲久久| 这里只有精品丝袜| 影音先锋日韩有码| 日韩视频精品在线| 国产一区二区高清视频| 亚洲激情另类| 国产裸体写真av一区二区| 你懂的网址国产 欧美| 欧美日韩亚洲视频一区| 久久精品国产精品亚洲| 欧美福利一区二区| 欧美怡红院视频一区二区三区| 久久久久久97三级| 亚洲视频一区二区| 久久久久久久一区二区三区| 亚洲一区二区三区免费在线观看 | 欧美一二三区精品| 亚洲精品网站在线播放gif| 亚洲在线中文字幕| 日韩小视频在线观看| 欧美在线影院| 亚洲尤物在线| 欧美国产精品| 免费在线一区二区| 国产精品亚洲一区| 99热在这里有精品免费| 亚洲国产日韩欧美在线99 | 亚洲毛片av在线| 黑人巨大精品欧美黑白配亚洲 | 最近中文字幕日韩精品 | 国产精品jvid在线观看蜜臀| 欧美高清在线观看| 国产一级久久| 午夜精品福利视频| 亚洲一区二区三区777| 欧美成人资源网| 欧美国产日韩一区二区在线观看| 国产欧美在线视频| 亚洲免费人成在线视频观看| 这里只有精品电影| 欧美日韩另类丝袜其他| 亚洲激情不卡| 亚洲精品久久久久中文字幕欢迎你| 久久精品日产第一区二区三区| 欧美中文字幕视频| 国产精品一区二区你懂得| 夜夜嗨av色综合久久久综合网 | 国产一区二区三区在线观看免费视频 | 亚洲桃色在线一区| 欧美精品一区在线观看| 亚洲国产精品久久久久秋霞不卡| 在线观看不卡av| 老牛嫩草一区二区三区日本| 免费看精品久久片| 亚洲福利在线观看| 免费观看国产成人| 亚洲国产另类精品专区| 亚洲最黄网站| 欧美亚州一区二区三区| 中文精品一区二区三区 | aa国产精品| 欧美午夜免费| 亚洲午夜精品久久久久久app| 亚洲综合欧美| 国产一区二区三区不卡在线观看| 久久久精品日韩欧美| 欧美99久久| 亚洲图片欧洲图片日韩av| 国产精品豆花视频| 午夜精品av| 欧美大片免费观看| 亚洲一区二区黄| 韩国久久久久| 欧美成人自拍视频| 亚洲一区二区三区在线播放| 久久免费视频网| 艳女tv在线观看国产一区| 国产精品久久久久久久久久尿| 欧美一区在线看| 91久久精品国产91性色| 亚洲免费一在线| 在线观看亚洲| 欧美性猛交xxxx乱大交退制版| 午夜在线观看免费一区| 欧美激情一区二区三区| 亚洲女人天堂成人av在线| 激情91久久| 欧美视频久久| 看片网站欧美日韩| 亚洲一区二区在| 亚洲国产精品嫩草影院| 久久se精品一区精品二区| 亚洲精品系列| 激情成人在线视频| 国产精品成人一区二区三区吃奶 | 欧美日韩精品一本二本三本| 欧美伊人久久久久久久久影院 | 久久激情综合网| 一区二区三区产品免费精品久久75 | 国产日韩欧美二区| 欧美人与禽猛交乱配视频| 久久精品五月| 午夜精品久久久久| 亚洲精品视频在线播放| 欧美插天视频在线播放| 欧美在线视频一区二区| 中文国产成人精品| 亚洲日本理论电影| 在线观看成人av电影| 国产欧美精品一区二区色综合 | 欧美亚洲一区| 国产精品99久久久久久白浆小说| 亚洲高清电影| 欧美二区不卡| 欧美成人精品激情在线观看| 久久久国产一区二区| 欧美一区二区精品| 午夜精品久久一牛影视| 亚洲一区二区视频在线| 一本色道久久综合亚洲精品高清| 91久久精品日日躁夜夜躁国产| 一区二区三区在线免费观看| 国产午夜一区二区三区| 国产欧美日本一区视频| 国产精品欧美久久久久无广告| 欧美日韩在线精品一区二区三区| 欧美高清免费| 欧美成人按摩| 欧美国产成人在线| 欧美精品少妇一区二区三区| 欧美粗暴jizz性欧美20| 欧美精品一区二区在线观看 | 久久精品国产精品亚洲综合 | 亚洲韩国日本中文字幕| 欧美国产欧美亚洲国产日韩mv天天看完整 | 亚洲伊人伊色伊影伊综合网| 亚洲一区免费观看| 亚洲女与黑人做爰| 翔田千里一区二区| 欧美伊人久久久久久久久影院| 久久国产福利| 欧美**字幕| 欧美视频在线一区| 国产美女搞久久| 黄色成人小视频| 亚洲欧洲在线看| 亚洲午夜伦理| 久久精品三级| 蜜臀a∨国产成人精品| 亚洲国产一区二区a毛片| 亚洲激情一区| 午夜精彩视频在线观看不卡| 久久精品99| 欧美精品成人一区二区在线观看| 欧美日韩一区二区三区在线观看免| 国产精品久久久久久久久搜平片| 国产视频一区免费看| 亚洲二区精品| 亚洲在线视频免费观看| 久久久久久久成人| 亚洲精品免费网站| 亚洲欧美日韩网| 欧美激情一区二区三区不卡| 国产精品亚洲人在线观看| 亚洲高清av在线| 午夜精品久久久久久久男人的天堂| 久久综合色婷婷| 一本久久青青| 久久综合亚州| 国产欧美日韩一区二区三区在线观看 | 亚洲欧美日韩国产成人| 噜噜噜91成人网| 中日韩午夜理伦电影免费| 久久香蕉国产线看观看网| 国产精品久久久久三级| 亚洲欧洲综合| 久久久国产视频91| 亚洲视频电影图片偷拍一区| 欧美不卡在线| 在线免费观看日本一区| 午夜一区二区三区不卡视频| 亚洲激情欧美激情| 久久精品视频99|