gSoap传递结构体数组之上网不易

gSoap传递结构体数组之上网不易

每次需要用到网络,无论PC,Mac或是移动设备,一阵愤怒涌上来。Google全线被封,Dropbox被封,Line被封,Amazon WS 被封,One Drive 被封,手机上百分之八十应用挂了……就在墙内死去吧!F**k GFW!!顺便祝福Fang Sir。如今的封锁已经到了丧心病狂的地步,当局没有任何下线和尺度!我的这个日记本也快挂了。不说了,我要砸电脑了……
GFWcomic

——————图片引自http://factsanddetails.com/

现在见到最多的已经不是”Connection is reset(连接被重置)”,而是”This webpage is not available”,果然没有最牛最有最傻X。
最近用到强大的C版本gSoap库处理Web service服务端和客户端。虽然以前用过,但这次需要用到数据库,需要返回结果集,这里就直接贴出代码,分别返回单条结构体和多条的结构体数组。
接口interface.h是这样定义的:

//interface.h
//soapcpp2 -c -L -S -x  interface.h 
//soapcpp2 -c -C -L -x   interface.h 
struct  OnlWS__FuckGFWResp
{
   char *Google;
   char *MrFang;
   char *GreatWall;
   char *Blocks;
   char *DnsPollution;
   char *CNShit;
};

struct  OnlWS__GetFreeNet
{
    char *Free;
    char *FreeAgain;
    char *FreeEver;
};

struct OnlWS__GetFreeNetResp
{
    struct OnlWS__GetFreeNet * __ptr;
    int  __size;
}; 
int OnlWS__GetShitGFW(char *option,struct OnlWS__FuckGFWResp  *resp);
int OnlWS__GetFreeInfo(char *option,struct OnlWS__GetFreeNetResp  *resp);

接口定义好后使用gsoap提供的工具生成服务端代码:

soapcpp2 -c -L -S -x  interface.h

接下来实现服务端代码和接口的逻辑:(略去一些代码),接口处理逻辑需要返回结构体数组,因此需要开辟一定长度的空间,这里使用链表来动态开辟。

    //........
    resp->__size=nRecCnt;
    resp->__ptr= soap_malloc(soap,(resp->__size+1)*sizeof(*resp->__ptr));
    
    pLink->ptAnyNode= soap_malloc(SOME_DATA_STRUCT);
    pLink->pNext=NULL;
    tAnyLink *p ,*phead=pLink;
    for(i=0;i<resp->__size-1;i++)
    {
        p=(tAnyLink *)soap_malloc(soap,sizeof(tAnyLink));
        p->ptAnyNode=(SOME_DATA_STRUCT *)soap_malloc(soap,sizeof(SOME_DATA_STRUCT));
        p->pNext=NULL;
        phead->pNext=p;
        phead=p;
    }

进行赋值操作,返回结果。

客户端实现比较简单,因为可以直接取到结构体数组的长度,直接使用数组下标即可获取到结果。这里列出Python的测试程序:使用suds 包来完成客户端处理web service .

# -*- coding: utf-8 -*-
import suds
import logging
import sys

def main():
    print sys.stdout.encoding
    url="http://192.168.101.181:11080" 
    client=suds.client.Client(url)
    rst=client.service.GetShitGFW('WALL')
    print client.last_received()
    rs=client.service.GetFreeInfo('FREE')
    print rs
    print client.last_received()
    
if __name__=='__main__':
    main()


看看返回的情况:

(GetFreeNetResp){
   item[] = 
      (GetFreeNet){
         Free = "01"
         FreeAgain = "A"
         FreeEver = "2014-07-18 07:37:51.110000"
      },
      (GetFreeNet){
         Free = "10"
         FreeAgain = "B"
         FreeEver = "2014-07-18 07:37:51.110000"
      },
      (GetFreeNet){
         Free = "15"
         FreeAgain = "G"
         FreeEver = "2014-07-18 07:37:51.110000"
      },
      (GetFreeNet){
         Free = "20"
         FreeAgain = "C"
         FreeEver = "2014-07-18 07:37:51.110000"
      },
 }

好了,上网不易,且行且珍惜。

毕业四年:在深圳的那些日子……

毕业四年:在深圳的那些日子……

–没有抒情的天份,只将那段记忆记成流水
记忆深处恐怕只有开始和结束…
深圳的天很蓝很蓝……
深圳的海辽阔可爱……
四年前(2010年7月),我们匆匆告别一起呆过四年的同学,离开学校,踏上旅程。
我是从老丈人家(那时候还不算)出发的,大病一场还没痊愈,奇怪的是每次去老婆家都要成一次病,可能去她家都要受到特殊的“优待”吧。
2010年7月11日早我出发去深圳,终点到广州的火车,老婆去了苏南一个小城市。这次和四年前我只身一人从老家陕西坐火车到学校不同,而是有一个兄弟和我一起,而在接下来的几个月我们都在同一个地方。
出发前我去了趟老校区,在图书馆前的椅子上坐了好久,给母校一个告别。
然后,火车上近30个小时,我的记忆就真空了。直到火车到达广州我的记忆才慢慢恢复。似乎途中   我和兄弟JG都在上铺躺着,吃着泡面,老家带的咸鸭蛋,似乎我的手还被开水烫伤了……
广州站,广州很热。我们需要换乘到达深圳的高铁,不用出站直接在站内买票。那个时候应该还不算高铁,城际准高铁吧,听说可以免费领水,其实就是现在动车高铁的5100矿泉水。我拿着票去找服务人员,那个阿姨或者大姐跟我说:“你渴吗,给你两瓶吧”。这里的人真好! 我们坐上了这城际列车,座位都是面对面的,途经东莞历时1个多小时。沿途的景色和北方截然不同,绿色的小丘陵,绿色的山林,还有蓝蓝的天,那么蓝……
深圳,罗湖火车站。需要在这里设置一个断点,而且需要STEP。这是我们来深圳的第一站,旅途中唯一一次的到达站而且再也没有出发和到达……这里我看到深圳的第一眼,天空是那么蓝。行色匆匆的人流,五彩斑斓的广告牌。我沿着走廊往前走,一个个的导向牌和路标:香港(HONGKONG)/深圳(SHENZHEN),出发(Departure)/抵达(Arrival)。一条道,一扇门,两个世界。脚下的路和所走的路何尝不是呢,未知的前方又有多少茫然和无奈!
在火车站等了很久,等公司接我们,慢慢的身边也多了一些叫做“同事”的人们。直到夜色开始朦胧,我们才动身,目的地是龙岗区的一个小镇。途经盐田,大小梅沙。车子在沿海的高速上颠簸,辉煌的灯火和高楼大厦慢慢的消失在身后,两边只有朦胧的山,朦胧的海。
晚9点我们终于抵达,领了宿舍号13#-102 ,有没有钥匙已经不记得了。然后路过我宿舍是看到里边几个身影,似乎在打游戏。于是我没有选择进去,而是去我13#-105,事后证实这是一个愚蠢的决定,对我们俩。是的,进入宿舍,一切都很糟糕,因为根本就没有想象过,可能没有想的那么糟吧,一种冲动涌上来,但是没有其他更好的选择,忍受并继续。一些生活用品是邮寄过来的,还不能取,我们去了公司外的超市买了凉席,然后……睡着了。
这是一个山村里的小镇,周围都是山,茂密的树木,我想应该有竹子,芭蕉,荔枝,龙眼吧。空气非常清新,总有一种水润和清香感觉。低纬度区域天空显得格外得高,辽阔深邃。山顶上偶尔会漂浮着几簇云朵,有一种威严的感觉。凝视天空,仿佛看到了整个宇宙,人类是多么的渺小!
sky
这个小天地倒是非常热闹,和大学校园似乎没什么区别,到处是一群一群穿着同样颜色衣服的人,或走或停…上班,吃饭,睡觉……日复一日……但都只是在这个小村庄里……
有一天,我们打算进城去。于是我们坐着超慢的公交车,可能是M362吧,到罗湖体育馆,那时候还不知道有E11和H92,然后我们去了华强北,到了真正的深圳。看到了什么已经忘记了,只记得我们的感触:从非洲到了欧洲。然后就是那顶很大很大的太阳,湛蓝的天空。
我感受到深圳的包容和热情。这里没有本地人的概念,不像上海。人们总是很热情,友好,礼貌。小饭馆吃饭,只要落座,一盘花生米,茶水马上送来。手机店看手机也会有服务员热情的给你倒茶搬凳子。永远的双手接上你递的卡或者现金,然后附上一句“谢谢”。刷卡之后还要认真的核对签名,这是我在其他内地城市都没有看到的。对了,你的卡上没有签名,店员也是礼貌地让你现签上名。
然后,工作。下班约几个同学,叫一辆摩的,去鲨鱼冲海里游泳……周末去同事家打牌蹭饭……
我去了杨梅坑玩CS,游泳,晚上海边烧烤;我去了西涌海滩;我去了大梅沙,东部华侨城茶溪谷……
然后,几个月后,我打算离开这里了,去了南山区科技园。
又在中原某个银行艰难的度过了一年,再次回来时,深圳已经变化了不少,深大站地铁直接到宝安机场,不用再去福田交通枢纽坐机场大巴了。
晚上,看着深南大道车流穿梭,霓虹闪烁,又一次,我感觉的,我已经渺小到不存在……
之后,我离开了深圳,一座美丽可爱的城市。
到现在还未曾回去过……

……<献给四年前的我>……