要了解资费的区别,首先要了解这两种方式的不同:
1,区别
CMNET和CMWAP是中国移动GPRS网络的两个不同APN(接入点名称),之所以这样分类是以控制为目的。CMNET提供了NAT服务,使用该服务的手机可以直接访问internet。CMWAP只提供了WAP代理和HTTP代理,手机上网能访问的范围有限,接入时只能访问GPRS网络内的IP(10,*,*,*)。因此CMWAP主要用于手机WAP上网,CMNET则是用于PC,笔记本电脑,PDA等设备实现GPRS上网。两者手机上网的方式没有差别,如此划分是中国移动对手机上网服务对象的定位不同,所以他们的应用范围和自费标准不同。
2,适用范围
拥有智能手机的用户一定很关心手机上的应用软件是否适用于所在网络。使用CMNET服务的用户可选择各种手机用的网络软件,而使用CMWAP的用户则可以通过测试手机访问网络的情况来考虑选择哪些应用软件。
中国移动的WAP网关对外只提供HTTP代理协议(80和8080端口)和WAP网关协议(9201端口),要让手机能够以WAP接入方式工作,应用程序的网络请求必须基于HTTP协议,以及支持HTTP代理协议或WAP网关协议。
比如,常见的手机JAVAQQ软件程序有socket和HTTP两种版本。目前网上流传的可用于CMWAP的JAVAQQ就是基于HTTP协议的,如JAVAQQ 2004在程序启动画面中就明确标示“KJAVA QQ HTTP”,而SIS版的QQ和agilemessenger(S60的MSN客户端)因为是采用的普通的socket连接方式,因此无法用于CMWAP。
3,人为因素
由于CMWAP是中国移动建设的APN,许多WAP计费业务必须通过CMWAP方式才能计费,因此中国移动会对CMWAP方式使用移动业务的用户在流量费上给予一定优惠,比如很多省市移动会推出不通的gprs流量套餐,如10元/5M gprs流量(只限cmwap方式)。而CMNET由于不能进行业务计费,因此也自然而然地没有什么优惠可讲,严格按照流量来计费啦。
------------------------------------------------------
09年全国各地中国移动的GPRS上网费用都大大降低。我目前使用的是河北移动神州行的20元GPRS套餐,150M/月。不区分CMNET和CMWAP。在这次资费下调改动里面,一向走在前列的广东移动却没有像大多数省份的移动那样-不再区分cmwap和cmnet。如果这是一种技术上的限制,这可以理解。但既然可以不区分,为何还要继续区分?
(截图为河北移动GPRS资费)
移动降低GPRS费用一是为3G费用做铺垫,二是希望借这一方式来留住数据用户。何不将步伐在迈大一步,取消cmnet和cmwap的区分,将两者合二为一?
一、cmwap和cmnet的区别
这是有中国特色的人为区分两种GPRS接入方式。据我所知只有中国将GPRS分解为2种接入点。
1、cmwap的特点cmwap接入方式的限制很多,cmwap接入方式只开放80,8080,9201端口,仅支持http和wap协议。也就是说,你的移动设备将无法使用基于POP3、IMAP等协议的软件。
对于一般的用手机浏览网页,cmwap不会出现任何问题,因为这些网页都是基于http协议的。但是,有些软件,比如手机Gtalk,使用cmwap你将无法连接上,除非这个软件提供协议转换功能。
另外,由于cmwap是经过移动的内网代理上网的,移动将我们手机的标识全部抹去,这就是为什么我们的手机无法被网站识别的原因。
2、cmnet的特点cmnet就像我们使用电脑连接互联网,除了伟大的墙,你用移动设备连接互联网不会有任何限制。
手机标识也不会被抹去。
二、区分cmwap和cmnet的背景
在电信重组之前,中国移动只有移动电话业务。cmwap接入方式花费的是移动内网的流量,而cmnet花费的则是铁通的流量,移动需要为此支付网间结算费。
我们能想到的,移动一定能想到,不然它不会成为中国最暴利的企业之一。
因此,移动将网间结算费算在用户头上,但事实上我们支付的费用远远高于网间结算费。
三、为什么合二为一?
1、软件需求并不是所有软件都支持http或wap协议使用,也并不是所有软件都能将本身的协议转换为http。事实上,大多数软件都必须使用cmnet来连接互联网。
所以,使用更高级的cmnet协议能迎合所有软件。
2、网间结算费消失这是主要的原因。
结合第二点背景里所说,cmnet之前之所以相对比较昂贵,是因为移动需要向固网运营商支付网间结算费。但是在电信重组后,目前3大运营商都有固网业务。铁通原先的业务全部收归到中国移动。
因此,之前由cmnet产生的网间结算费现在就变成“网内结算费”了,也就是说和cmwap使用同样的结算方式了。
既然移动少了网间结算费这一“负担”,为何还要区分cmnet和cmwap?
3、用户操作更简便如果你用S60手机,软件上网前会询问你要使用哪个接入点,这无疑给用户增加了操作烦恼,尤其是对于不知道cmnet和cmwap区别的用户。
四、尚待何时?
如果没有一个地区不再区分cmnet和cmwap,那讨论将两者二合为一可能为时尚早。但很多地区的GPRS套餐都已经不再区分cmwap和cmnet了。
另外,由于网间结算费的消失,以及cmnet能完成cmwap所能完成的任何事,cmwap已经没有存在的必要。
或者说,它们二合为一是必然的趋势。
如果你所在的地区不再区分二者,建议尽量选择cmnet接入点来上网。
最近在SBC3530开发板上玩Android,没想到厂商的驱动没有做好,眼睁睁的看着板子没法玩儿,找了很多驱动,用adb开发工具,开发板没有WIFI模块,浏览器又不能通过以太网口上网,想通过terminal emulator吧,没用权限,招都想尽了,死活就是不能安装APK,唯一可以传递数据的就只有SD卡
突然间闪过一个念头,file://协议,哈哈~~,先把apk copy到SD卡上,插到板子上,打开android内置的浏览器,在地址栏上输入 file:///sdcard/es_file_explorer_v1_4_8_9_web.apk,回车,Good job!弹出APK安装提示框,然后随心所欲的安装APK了
Android里面将图片保存到本地,到网络上搜索了一下,方法都差不多,大同小异,把输入流转换成输出流的过程而已。最近工作闲,特把其中的两个方法对比一下,看他们的效率如何(找javaSE里面测试的):
第一种方法:
public static void main(String[] args) { String url = "http://pic.yesky.com/imagelist/09/01/11277904_7147.jpg"; Long time1 = System.currentTimeMillis(); Long time2 = 0L; try { FileOutputStream fos = new FileOutputStream( "c:\\tmp.jpg "); InputStream is = new URL(/blog_article/url/index.html).openStream(); time2 = System.currentTimeMillis(); int data = is.read(); while(data!=-1){ fos.write(data); data=is.read(); } is.close(); fos.close(); } catch (IOException e) { e.printStackTrace(); } Long time3 = System.currentTimeMillis(); System.out.println("网络读取流的时间:" + (time2 - time1) + " 把输入流保存成文件的时间:"+ (time3 - time2)); }
第二种方法:中间用buffer做缓存
public static void main(String[] args){ String url = "http://pic.yesky.com/imagelist/09/01/11277904_7147.jpg"; Long time1 = System.currentTimeMillis(); Long time2 = 0L; try { int bytesum=0; int byteread=0; FileOutputStream fos = new FileOutputStream( "c:\\tmp2.jpg "); InputStream is = new URL(/blog_article/url/index.html).openStream(); time2 = System.currentTimeMillis(); byte[] buffer =new byte[4096]; while ((byteread=is.read(buffer))!=-1) { bytesum+=byteread; // System.out.println(bytesum); fos.write(buffer,0,byteread); } is.close(); fos.close(); } catch (IOException e) { e.printStackTrace(); } Long time3 = System.currentTimeMillis(); System.out.println("网络读取流的时间:" + (time2 - time1) + " 把输入流保存成文件的时间:"+ (time3 - time2)); }
每个方法测试了三次,结果如下:
第一种方法:
网络读取流的时间:453 把输入流保存成文件的时间:766
网络读取流的时间:344 把输入流保存成文件的时间:344
网络读取流的时间:297 把输入流保存成文件的时间:281
第二种方法:
网络读取流的时间:312 把输入流保存成文件的时间:282
网络读取流的时间:3484 把输入流保存成文件的时间:906
网络读取流的时间:828 把输入流保存成文件的时间:1250
第一种方法,发现效率高过第二种方法,而且第一种方法写法简洁的多。建议用第一种方法。
其实在android里面,不建议直接把网络图片原样写人sd里面,毕竟手机的sd空间是有限的。最常用的方法是把网络图片压缩成jpg格式保存:
byte[] data = readInputStream(new URL(/blog_article/url/index.html).openStream()); Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length); bitmap.compress(CompressFormat.JPEG, 100, new FileOutputStream( file));
readInputStream()方法的代码:(把输入流转换成比特流)
public static byte[] readInputStream(InputStream inStream) throws Exception{ ByteArrayOutputStream outSteam = new ByteArrayOutputStream(); byte[] buffer = new byte[4096]; int len = 0; while( (len = inStream.read(buffer)) != -1 ){ outSteam.write(buffer, 0, len); } outSteam.close(); inStream.close(); return outSteam.toByteArray(); }