当前位置:  编程技术>移动开发
本页文章导读:
    ▪正确地访问网络资源-Proxy的使用        正确地访问网络资源----Proxy的使用 http://blog.csdn.net/sodino/article/details/6302313   天朝有很多独特的东西,今天要涉及到的是CMWAP与CMNET。   现在仍有许多Android手机用的是CMWAP连接网络的,如果只.........
    ▪ Proguard源码分析(2)输出文件        Proguard源码分析(二)输出文件 ProGuard outputs thefollowing files after it runs: dump.txt···描述apk文件中所有类文件的内部结构  PrintStream ps = createPrintStream(configuration.dump);try{    programClassPool.classesAccept.........
    ▪ 您听说过:“飞天5K”吗       你听说过:“飞天5K”吗?   飞天5K,是什么?小编亲临阿里云开发者大会,对飞天5K的来龙去脉了解的透透地,现在给你们揭露一下:     2013年10月24日,阿里云开发者大会第一天,在.........

[1]正确地访问网络资源-Proxy的使用
    来源: 互联网  发布时间: 2014-02-18
正确地访问网络资源----Proxy的使用

http://blog.csdn.net/sodino/article/details/6302313

 

天朝有很多独特的东西,今天要涉及到的是CMWAP与CMNET。

 

现在仍有许多Android手机用的是CMWAP连接网络的,如果只是简单滴使用URL.openConnection()开启一个HttpURLConnection,则会发现有一个UnknownHostException被抛出。唉...身为悲剧的程序员,就要开始解决这种bug了。

 

Sodino还发现一个现象,为什么自己的程序会崩掉,而Google浏览器就不会呢?与国产软件不同,国产软件身处天朝的软硬件环境下成长,可能会将代理IP(10.0.0.172)写进程序中,Sodino也确实反编译了几个程序后发现他们也是这样做来保持CMWAP下的正常联接。但是,Google浏览器可不是国人写的,那帮老外可不考虑天朝还有个CMWAP。那他们是如何保证网络的正常联接呢?一番鼓捣下,有了以下代码,可以在WIFI/CMWAP/CMNET/CTNET下正常访问网络,附带如何使用ping使用。

先上效果图:

 

 

[java] view plaincopy
 
  • package lab.sodino.network;  
  • import java.io.IOException;  
  • import java.io.InputStream;  
  • import java.net.HttpURLConnection;  
  • import java.net.InetSocketAddress;  
  • import java.net.MalformedURLException;  
  • import java.net.URL;  
  • import java.net.UnknownHostException;  
  • import android.app.Activity;  
  • import android.content.Context;  
  • import android.net.ConnectivityManager;  
  • import android.net.NetworkInfo;  
  • import android.os.Bundle;  
  • import android.os.Handler;  
  • import android.os.Message;  
  • import android.util.Log;  
  • import android.view.View;  
  • import android.widget.Button;  
  • import android.widget.TextView;  
  • public class NetworkAct extends Activity {  
  •     public static final int CLEAR_TEXT = 0;  
  •     public static final int APPEND_TEXT = 1;  
  •     private TextView txtInfo;  
  •     private Button btnPing;  
  •     private Button btnConnect;  
  •     private Button btnClear;  
  •     private BtnListener btnListener;  
  •     private Handler handler = new Handler() {  
  •         public void handleMessage(Message msg) {  
  •             switch (msg.what) {  
  •             case APPEND_TEXT:  
  •                 String content = msg.obj.toString();  
  •                 txtInfo.setText("/n" + content);  
  •                 break;  
  •             case CLEAR_TEXT:  
  •                 txtInfo.setText("");  
  •                 break;  
  •             }  
  •         }  
  •     };  
  •     public void onCreate(Bundle savedInstanceState) {  
  •         super.onCreate(savedInstanceState);  
  •         setContentView(R.layout.main);  
  •         btnListener = new BtnListener();  
  •         txtInfo = (TextView) findViewById(R.id.txtInfo);  
  •         btnPing = (Button) findViewById(R.id.btnPing);  
  •         btnPing.setOnClickListener(btnListener);  
  •         btnConnect = (Button) findViewById(R.id.btnConnect);  
  •         btnConnect.setOnClickListener(btnListener);  
  •         btnClear = (Button) findViewById(R.id.btnClear);  
  •         btnClear.setOnClickListener(btnListener);  
  •     }  
  •     /** 
  •      * @param param 
  •      *            指定的域名如(www.google.com)或IP地址。 
  •      */  
  •     private void doPing(final String param) {  
  •         new Thread() {  
  •             public void run() {  
  •                 String line = "";  
  •                 InputStream is = null;  
  •                 try {  
  •                     line = "/nping -c 1 " + param;  
  •                     // -c 1:表示ping的次数为1次。  
  •                     Process p = Runtime.getRuntime().exec("ping -c 1 www.google.com");  
  •                     // 等待该命令执行完毕。  
  •                     int status = p.waitFor();  
  •                     if (status == 0) {  
  •                         // 正常退出  
  •                         line += "Pass";  
  •                     } else {  
  •                         // 异常退出  
  •                         line += "Fail: Host unreachable";  
  •                     }  
  •                     is = p.getInputStream();  
  •                     byte[] data = new byte[is.available()];  
  •                     is.read(data);  
  •                     line += "/n" + new String(data);  
  •                 } catch (UnknownHostException e) {  
  •                     line += "Fail: Unknown Host";  
  •                 } catch (IOException e) {  
  •                     line += "Fail: IOException";  
  •                 } catch (InterruptedException e) {  
  •                     line += "Fail: InterruptedException";  
  •                 }  
  •                 Message msg = new Message();  
  •                 msg.what = APPEND_TEXT;  
  •                 msg.obj = line;  
  •                 handler.sendMessage(msg);  
  •             }  
  •         }.start();  
  •     }  
  •     private void go2Network() {  
  •         new Thread() {  
  •             public void run() {  
  •                 String line = "";  
  •                 URL url = null;  
  •                 HttpURLConnection httpConn = null;  
  •                 InputStream is = null;  
  •                 try {  
  •                     url = new URL("http://www.sodino.com/index.html");  
  •                     // Log.d("ANDROID_LAB", "Protocol=" + new  
  •                     // URL("https://www.sodino.com").getProtocol());  
  •                     // 需要android.permission.ACCESS_NETWORK_STATE  
  •                     NetworkInfo networkInfo = ((ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE))  
  •                             .getActiveNetworkInfo();  
  •                     // 如果是使用的运营商网络  
  •                     if (networkInfo.getType() == ConnectivityManager.TYPE_MOBILE) {  
  •                         // 获取默认代理主机ip  
  •                         String host = android.net.Proxy.getDefaultHost();  
  •                         // 获取端口  
  •                         int port = android.net.Proxy.getDefaultPort();  
  •                         if (host != null && port != -1) {  
  •                             line += "/nhost[" + host + "] port[" + port + "]";  
  •                             // 封装代理連接主机IP与端口号。  
  •                             InetSocketAddress inetAddress = new InetSocketAddress(host, port);  
  •                             // 根据URL链接获取代理类型,本链接适用于TYPE.HTTP  
  •                             java.net.Proxy.Type proxyType = java.net.Proxy.Type.valueOf(url  
  •                                     .getProtocol().toUpperCase());  
  •                             java.net.Proxy javaProxy = new java.net.Proxy(proxyType, inetAddress);  
  •                             httpConn = (HttpURLConnection) url.openConnection(javaProxy);  
  •                         } else {  
  •                             httpConn = (HttpURLConnection) url.openConnection();  
  •                         }  
  •                     } else {  
  •                         httpConn = (HttpURLConnection) url.openConnection();  
  •                     }  
  •                     httpConn.connect();  
  •                     int length = httpConn.getContentLength();  
  •                     byte[] data = new byte[length];  
  •                     String encoding = httpConn.getContentEncoding();  
  •                     line += "/nlength=" + length + " encoding=" + encoding;  
  •                     is = httpConn.getInputStream();  
  •                     is.read(data);  
  •                     String content = null;  
  •                     if (encoding != null) {  
  •                         content = new String(data, encoding);  
  •                     } else {  
  •                         content = new String(data);  
  •                     }  
  •                     line += "/nContent[/n" + content + "/n]";  
  •                     Message msg = new Message();  
  •                     msg.what = APPEND_TEXT;  
  •                     msg.obj = line;  
  •                     handler.sendMessage(msg);  
  •                 } catch (IOException ie) {  
  •                     ie.printStackTrace();  
  •                 } finally {  
  •                     try {  
  •                         if (is != null) {  
  •                             is.close();  
  •                         }  
  •                         if (httpConn != null) {  
  •                             httpConn.disconnect();  
  •                         }  
  •                     } catch (IOException ie) {  
  •                         ie.printStackTrace();  
  •                     }  
  •                 }  
  •             }  
  •         }.start();  
  •     }  
  •     class BtnListener implements Button.OnClickListener {  
  •         public void onClick(View view) {  
  •             if (view == btnPing) {  
  •                 // doPing("www.google.com");  
  •                 doPing("10.0.0.172");  
  •             } else if (view == btnConnect) {  
  •                 go2Network();  
  •             } else if (view == btnClear) {  
  •                 Message msg = new Message();  
  •                 msg.what = CLEAR_TEXT;  
  •                 handler.sendMessage(msg);  
  •             }  
  •         }  
  •     }  
  • }  
  •  

     

    如此,悲剧的程序员解决了不同网络状态下如何保证正常链接的问题。

    最后补充下:Android手机在CMWAP上要能够正常上网,除了设置一大堆代理数据外,还需进入拨号器下按"*#*#4636#*#*"→Phone Information下拉到最后后有个“Toggle DNS Check”,将其设置为allow


        
    [2] Proguard源码分析(2)输出文件
        来源: 互联网  发布时间: 2014-02-18
    Proguard源码分析(二)输出文件

    ProGuard outputs thefollowing files after it runs:

    dump.txt···描述apk文件中所有类文件的内部结构

     PrintStream ps = createPrintStream(configuration.dump);
    try{
        programClassPool.classesAccept(new ClassPrinter(ps));
    }

    mapping.txt···列出了类、方法、成员的原貌与混淆后的映射表。在收到错误报告时,可以用它翻译混淆后的堆栈信息。

    -printmapping

    seeds.txt···列出未混淆的类与成员

    -printseeds

    usage.txt···列出从apk中清除的无用代码

    -printusage


        
    [3] 您听说过:“飞天5K”吗
        来源: 互联网  发布时间: 2014-02-18
    你听说过:“飞天5K”吗?

      飞天5K,是什么?小编亲临阿里云开发者大会,对飞天5K的来龙去脉了解的透透地,现在给你们揭露一下:

     

      2013年10月24日,阿里云开发者大会第一天,在“10.24”这个对开发者来说略显特别的日子(1024=2的10次方,坊间传说是“程序员节”),对阿里云来讲也是意义重大,‘飞天5K'的标志在的在众多阿里云员工,客户的感慨中揭开面纱。这块屹立在青山绿水间的雕塑将成为转塘阿里云创业创新基地的地标。

     

      2013年8月15日,阿里巴巴集团正式运营服务器规模达到5000台(5K)的“飞天”集群,成为中国第一个独立研发拥有大规模通用计算平台的公司,也是世界上第一个对外提供5K云计算服务能力的公司。目前,只有Google、Facebook这样的顶级技术型IT公司,其集群规模有能力按照5000来划分,而此前国内还没有这样的技术。

     

      在此次飞天5K纪念揭碑仪式上,飞天5K项目组成员的再度聚首让人回想起了那场惊心动魄的“战争”;另一方面是自上至下对技术的重视——只有技术过硬,才能最终服务于业务。阿里云飞天5K项目的精彩表现,让我们没有理由不相信,伴随着中国的云计算生态系统的日益完善,中国云计算跻身国际云计算领先位置并非遥不可及。


        
    最新技术文章:
    ▪Android开发之登录验证实例教程
    ▪Android开发之注册登录方法示例
    ▪Android获取手机SIM卡运营商信息的方法
    ▪Android实现将已发送的短信写入短信数据库的...
    ▪Android发送短信功能代码
    ▪Android根据电话号码获得联系人头像实例代码
    ▪Android中GPS定位的用法实例
    ▪Android实现退出时关闭所有Activity的方法
    ▪Android实现文件的分割和组装
    ▪Android录音应用实例教程
    ▪Android双击返回键退出程序的实现方法
    ▪Android实现侦听电池状态显示、电量及充电动...
    ▪Android获取当前已连接的wifi信号强度的方法
    ▪Android实现动态显示或隐藏密码输入框的内容
    ▪根据USER-AGENT判断手机类型并跳转到相应的app...
    ▪Android Touch事件分发过程详解
    ▪Android中实现为TextView添加多个可点击的文本
    ▪Android程序设计之AIDL实例详解
    ▪Android显式启动与隐式启动Activity的区别介绍
    ▪Android按钮单击事件的四种常用写法总结
    ▪Android消息处理机制Looper和Handler详解
    ▪Android实现Back功能代码片段总结
    ▪Android实用的代码片段 常用代码总结
    ▪Android实现弹出键盘的方法
    ▪Android中通过view方式获取当前Activity的屏幕截...
    ▪Android提高之自定义Menu(TabMenu)实现方法
    ▪Android提高之多方向抽屉实现方法
    ▪Android提高之MediaPlayer播放网络音频的实现方法...
    ▪Android提高之MediaPlayer播放网络视频的实现方法...
    ▪Android提高之手游转电视游戏的模拟操控
     


    站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3