cmwap 能否使用socket 网络讨论汇总

1.cmwap相关:

cmwap是中国移动提供的浏览服务接入点,正常情况下,只开通HTTP 80端口,所以cmwap不支持socket通信(如果实在需要,需要向中国移动做业务申请,进行网关配置),因此一般的socket通信只能用cmnet(设立初衷针对无线上网)接入点。

2.移动网关的作用
a)移动网关的主要作用是提高访问速度。因为客户请求的数据存于代理服务器的硬盘中,因此下次这个客户或其它客户再请求相同目的站点的数据时,就能直接从代理服务器的硬盘中读取,代理服务器起到了缓存的作用,但缓存却给开发人员造成障碍,如cookie缓存问题等。
b)获取手机用户数据,如手机号码等

3. cmwap实现socket原理:

     其实由于CMWAP是一个标准的HTTP代理服务器,也就是说可以处理任何的基于HTTP协议的转发请求,那么就可以使用socket方式编程时使用HTTP协议即可了。

      实现原理:使用socket和CMWAP建立连接,然后将网络协议设计成HTTP协议的格式,这样CMWAP就可以继续实现请求的转发了,这就是实现的基本原理。

       当然,由于socket连接方式可以实现持续连接,这里的持续连接只存在于手机和CMWAP之间,但是可以只建立一次连接就实现多次的发送,还是基于请求-响应结构实现的,所以可以说实现了一部分socket的功能,而服务器端可以采用已有的HTTP服务器,从而降低开发成本和时间。

       该技术的优势主要有以下几点:

a     使用CMWAP进行数据传输,可以为用户节约流量费用。

b     由于手机和CMWAP之间建立的是持续连接,所以可以提高网络响应速度。

c      使用该方式,可以实现服务器端兼容HTTP连接和socket连接,也就是使用一组服务器,降低开发成本和减少开发时间。

 

4. 测试

经过测试,可以不用HTTP协议进行数据的封装,只要和代理服务器建立连接,发送
CONNECT http://219.137.197.**:3650 HTTP/1.1/r/nHost:219.137.197.90:3650/r/n/r/n 的请求,如果连接成功,服务器返回的信息是 "HTTP/" + 代理版本 + "200" + 描述("Connection established")
.就可以用已经连接的Socket正常的发消息了

环境: 广东,短连接

 

5,问题:

connect 是 http 1.1 增加的新命令, 用于https, 建立隧道, 可用于穿越gateway, 但是其支持由厂商的实现确定,
你确认移动的wap gateway支持此命令吗, 出于安全考虑, 移动的wap gateway好像是不支持的, 否则, 移动怎么对wap业务进行2次确认, 实现计费?而且移动的不同省使用的wap gateway是不同厂家的产品, 支持也不同, 这种方式最好不要使用, 而且没看出来你这样设计有什么好处

 

缺点: a.缺少稳定性,

          b.数据量大 ,容易丢包,实际意义不大

 

symbian测试代码:

 

_LIT(KConnectIP,"10.0.0.172");//移动的cmwap代理网关
     const int KConnectPort = 80;//端口
    RSocket iSocket;
    TRequestStatus iStatus = KRequestPending;
    TBuf8<1024> recvBuf;
    HBufC8 *iBuffer = NULL;
   
    {
        RSocketServ iSocketServ;
        User::LeaveIfError(iSocketServ.Connect());
        TInetAddr iAddress;
        if (iAddress.Input(KConnectIP) == KErrNone)
        {
            User::LeaveIfError(iSocket.Open(iSocketServ, KAfInet, KSockStream, KProtocolInetTcp));
            iAddress.SetPort(KConnectPort);
           
            iStatus = KRequestPending;
            iSocket.Connect(iAddress, iStatus);      
            User::WaitForRequest(iStatus);
           
            TBuf8<1024> sendData1;
            sendData1.Append(_L8("CONNECT http://219.137.197.**:3650 HTTP/1.1/r/n"));  //开始格式化头  
             sendData1.Append(_L8("Host: 219.137.197.90:3650/r/n/r/n"));//  

            iSocket.Write(sendData1,iStatus);
            User::WaitForRequest(iStatus);
            TBuf8<1024> sendData;
            _LIT8(KURL,"GET http://219.137.197.**:3650 Http/1.1/r/n");
            _LIT8(KHOST, "Host: 219.137.197.**:3650/r/n");
            _LIT8(KOTHERS, "Accept: */*/r/n/r/n");
            sendData.Append(KURL);
            sendData.Append(_L("X-Online-Host: 219.137.197.**:3650/r/n"));
            sendData.Append(KHOST);
            sendData.Append(_L8("Connection: Keep-Alive/r/n"));
            sendData.Append(KOTHERS);   
     
            if (iStatus.Int() ==KErrNone)
            {
                iStatus = KRequestPending;
                iSocket.Write(sendData,iStatus);
                User::WaitForRequest(iStatus);
                if (iStatus.Int() ==KErrNone)
                {
                    TSockXfrLength iDummyLength;
                    TInt recvSize = 0;
                   
                    for(;;)
                    {
                        iStatus = KRequestPending;
                        iSocket.RecvOneOrMore(recvBuf, 0, iStatus, iDummyLength);
                        User::WaitForRequest(iStatus);
                        if (iStatus.Int()==KErrNone)
                        {
                            recvSize += recvBuf.Length();
                            if(iBuffer==NULL)
                                iBuffer = HBufC8::NewL(recvSize);
                            else
                                iBuffer = iBuffer->ReAlloc(recvSize);
                            iBuffer->Des().Append(recvBuf);
                        }
                        else
                        {
                            break;
                        }
                    }
                }
            }
            iSocket.Close();
        }
       
        iSocketServ.Close();
    }

 

以上内容皆来自于网络,本人转载只做学习参考用

 

 

你可能感兴趣的:(cmwap 能否使用socket 网络讨论汇总)