协议处理、通信工具

协议处理

协议处理包括协议分析协议封装

协议分析:发送协议、接收协议。

协议封装:节点对象化、节点序列化、请求接口(抽象)化、协议通用化。

协议格式:xml、json。xml可以压缩,压缩后比json还小。

协议压缩:wbxml、大量数据压缩。

常量放到接口中


通信工具

实现方式

1).使用HttpURLConnection(稳定性差。早期用的比较多,现在基本不用)

2).使用HttpClient

3).使用Socket通信(豌豆荚(USB、WIFI)、聊天工具)

通信渠道

1).WLAN(WiFi)

2).手机APN(Access Point Names)接入点(基站)

①WAP方式(地域性、增值业务——IP是10.0.0.172(200)端口是80)

②net方式

其中WAP方式需要先连接到通信运营商(代理),运营商会过滤一些增值业务的请求,所以访问会慢一点,而net方式可以直接访问互联网上的资源。移动、联通的代理IP是10.0.0.172,电信的是10.0.0.200.

处理步骤

1.判断网络类型,当为手机(WAP方式)上网时注意代理信息获取。

①判断当前是否可以联网:通过判断WiFi和mobile两种方式是否能够连接网路:

利用ConnectivityManager获取对应类型的NetworkInfo来判断当前网路情况,其中ConnectivityManager.TYPE_WIFI代表WiFi、ConnectivityManager.TYPE_MOBILE代表手机。

需要添加权限:ACCESS_NETWORK_STATE

private static boolean isWIFIConnection(Context context) {
	ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
	NetworkInfo networkInfo = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
	if(networkInfo != null){
		return networkInfo.isConnected();
	}
	return false;
}

②当确定为手机联网方式时,先读取被选中的APN,再 获取其代理参数 ,如果是net方式,其代理信息为空。

在两个类之间传递数据,需要定义一个类,在类中定义静态的要传递的参数。如:

public class GlobalParams {

	public static String PROXY = "";
	public static int PORT = 0;
}

Uri uri = Uri.parse("content://telephony/carriers/preferapn");

if(isMOBILE){
	ContentResolver resolver = context.getContentResolver();
	Uri uri = Uri.parse("content://telephony/carriers/preferapn");
	Cursor cursor = resolver.query(uri, null, null, null, null);
	if(cursor != null &&cursor.moveToNext()){
		GlobalParams.PROXY = cursor.getString(cursor.getColumnIndex("proxy"));
		GlobalParams.PORT = cursor.getInt(cursor.getColumnIndex("port"));
	}
}

2.使用HttpClient编写代码,加强稳定性。

public class HttpClientUtil {
	
	private HttpClient client;
	private HttpPost post;

	public HttpClientUtil(){
		client = new DefaultHttpClient();
		// 判断是否需要设置代理信息
		if(StringUtils.isNotBlank(GlobalParams.PROXY)){
			// 设置代理信息
			HttpHost host = new HttpHost(GlobalParams.PROXY, GlobalParams.PORT);
			client.getParams().setParameter(ConnRouteParams.DEFAULT_PROXY, host);
			
		}
	}
	
	/**
	 * 向指定的链接发送xml文件
	 * @param uri
	 * @param xml
	 * @return 
	 */
	public InputStream sendXml(String uri, String xml){
		post = new HttpPost(uri);
		
		try {
			StringEntity entity = new StringEntity(xml, ConstantValue.ENCODING);
			// 设置参数
			post.setEntity(entity);
			// 执行POST方法
			HttpResponse response = client.execute(post);
			if(response.getStatusLine().getStatusCode() == 200){
				// 获得响应的结果
				return response.getEntity().getContent();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值