189 8069 5689

android的网络编程,android网络编程实例

Android 网络编程之Socket理解

TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是指能够在多个不同网络间实现信息传输的协议簇。TCP/IP协议不仅仅指的是 TCP 和 IP 两个协议,而是指一个由 FTP 、 SMTP 、TCP、 UDP 、IP等协议构成的协议簇, 只是因为在TCP/IP协议中TCP协议和IP协议最具代表性,所以被称为TCP/IP协议。

成都一家集口碑和实力的网站建设服务商,拥有专业的企业建站团队和靠谱的建站技术,十多年企业及个人网站建设经验 ,为成都上千客户提供网页设计制作,网站开发,企业网站制作建设等服务,包括成都营销型网站建设,成都品牌网站建设,同时也为不同行业的客户提供成都网站设计、网站制作、外贸营销网站建设的服务,包括成都电商型网站制作建设,装修行业网站制作建设,传统机械行业网站建设,传统农业行业网站制作建设。在成都做网站,选网站制作建设服务商就选成都创新互联公司

互联网进行通信时,需要相应的网络协议,TCP/IP 原本就是为使用互联网而开发制定的协议族。因此,互联网的协议就是 TCP/IP,TCP/IP 就是互联网的协议。所以不要简单认为TCP/IP协议就是我们的网络请求http拿点东西,它是一个统称。

socket 的诞生是为了应用程序能够更方便的将数据经由传输层来传输,所以它本质上就是对 TCP/IP 的运用进行了一层封装,然后应用程序直接调用 socket API 即可进行通信。那么它是如何工作的呢?它分为 2 个部分,服务端需要建立 socket 来监听指定的地址,然后等待客户端来连接。而客户端则需要建立 socket 并与服务端的 socket 地址进行连接。

有图可以看出Socket是应用层跟传输层的桥梁,应用层通过socket api提供的方法来让数据流转到传输层。

接触Android网络编程需要什么知识基础

Android平台的网络应用绝大部分都是基于Java的编程接口的,也就是说我们开发类似的运用的时候可以有多种选择,比J2me确实好多了。

2.1. 标准Java接口

java.net.*下面提供了访问 HTTP 服务的基本功能。使用这部分接口的基本操作主要包括:

·创建 URL 以及 URLConnection / HttpURLConnection 对象

· 设置连接参数

·连接到服务器

· 向服务器写数据

·从服务器读取数据

import java.io.InputStream;

import java.io.OutputStream;

import java.net.URL;

import java.net.URLConnection;

import java.net.HttpURLConnection;

try {

// 创建一个 URL 对象

URL url = new URL(your_url);

// 创建一个 URL 连接,如果有代理的话可以指定一个代理。

URLConnection connection = url.openConnection(Proxy_yours);

// 对于 HTTP 连接可以直接转换成 HttpURLConnection,

// 这样就可以使用一些 HTTP 连接特定的方法,如 setRequestMethod() 等

//HttpURLConnection connection =

(HttpURLConnection)url.openConnection(Proxy_yours);

// 在开始和服务器连接之前,可能需要设置一些网络参数

connection.setConnectTimeout(10000);

connection.addRequestProperty("User-Agent",

"J2me/MIDP2.0");

// 连接到服务器

connection.connect();

// 往服务器写数据,数据会暂时被放到内存缓存区中

// 如果仅是一个简单的 HTTP GET,这一部分则可以省略

OutputStream outStream = connection.getOutputStream();

ObjectOutputStream objOutput = new ObjectOutputStream(outStream);

objOutput.writeObject(new String("this is a string..."));

objOutput.flush();

// 向服务器发送数据并获取应答

InputStream in = connection.getInputStream();

// 处理数据

...

} catch (Exception e) {

// 网络读写操作往往会产生一些异常,所以在具体编写网络应用时

// 最好捕捉每一个具体以采取相应措施

}

2.2. Apache接口

Apache HttpClient 是一个开源项目,弥补了 java.net.* 灵活性不足的缺点,为客户端的HTTP编程提供高效、最新、功能丰富的工具包支持。Android 平台引入了 Apache HttpClient 的同时还提供了对它的一些封装和扩展,例如设置缺省的HTTP超时和缓存大小等。早期的 Android 曾同时包括 Commons HttpClient (org.apache.commons.httpclient.*) 和 HttpComponents (org.apache.http.client.* ),不过当前版本 (1.5) 中开发者只能使用后者,也就是说类似以下的一些类:

使用这部分接口的基本操作与 java.net.* 基本类似,主要包括:

· 创建 HttpClient 以及 GetMethod / PostMethod, HttpRequest 等对象

·设置连接参数

·执行 HTTP 操作

· 处理服务器返回结果

import org.apache.http.HttpEntity;

import org.apache.http.HttpHost;

import org.apache.http.HttpResponse;

import org.apache.http.auth.AuthScope;

import org.apache.http.auth.UsernamePasswordCredentials;

import org.apache.http.client.methods.HttpGet;

import org.apache.http.conn.params.ConnRoutePNames;

import org.apache.http.params. HttpConnectionParams;

import org.apache.http.client.params. HttpClientParams;

try {

// 创建 HttpParams 以用来设置 HTTP 参数(这一部分不是必需的)

HttpParams params = new BasicHttpParams();

// 设置连接超时和 Socket 超时,以及 Socket 缓存大小

HttpConnectionParams.setConnectionTimeout(params, 20 * 1000);

HttpConnectionParams.setSoTimeout(params, 20 * 1000);

HttpConnectionParams.setSocketBufferSize(params, 8192);

// 设置重定向,缺省为 true

HttpClientParams.setRedirecting(params, true);

// 设置 user agent

HttpProtocolParams.setUserAgent(params, userAgent);

// 创建一个 HttpClient 实例

// 注意 HttpClient httpClient = new HttpClient(); 是Commons HttpClient

// 中的用法,在 Android 1.5 中我们需要使用 Apache 的缺省实现 DefaultHttpClient

HttpClient httpClient = new DefaultHttpClient(params);

// 创建 HttpGet 方法,该方法会自动处理 URL 地址的重定向

HttpGet httpGet = new HttpGet ("");

HttpResponse response = client.execute(httpGet);

if (response.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {

// 错误处理,例如可以在该请求正常结束前将其中断

httpGet.abort();

}

// 读取更多信息

Header[] headers = response.getHeaders();

HttpEntity entity = response.getEntity();

Header header = response.getFirstHeader("Content-Type");

} catch (Exception ee) {

//

} finally {

// 释放连接

client.getConnectionManager().shutdown();

}

import org.apache.http.HttpEntity;

import org.apache.http.HttpHost;

import org.apache.http.HttpResponse;

import org.apache.http.auth.AuthScope;

import org.apache.http.auth.UsernamePasswordCredentials;

import org.apache.http.client.methods.HttpGet;

import org.apache.http.conn.params.ConnRoutePNames;

import org.apache.http.params. HttpConnectionParams;

import org.apache.http.client.params. HttpClientParams;

try {

// 创建 HttpParams 以用来设置 HTTP 参数(这一部分不是必需的)

HttpParams params = new BasicHttpParams();

// 设置连接超时和 Socket 超时,以及 Socket 缓存大小

HttpConnectionParams.setConnectionTimeout(params, 20 * 1000);

HttpConnectionParams.setSoTimeout(params, 20 * 1000);

HttpConnectionParams.setSocketBufferSize(params, 8192);

// 设置重定向,缺省为 true

HttpClientParams.setRedirecting(params, true);

// 设置 user agent

HttpProtocolParams.setUserAgent(params, userAgent);

// 创建一个 HttpClient 实例

// 注意 HttpClient httpClient = new HttpClient(); 是Commons HttpClient

// 中的用法,在 Android 1.5 中我们需要使用 Apache 的缺省实现 DefaultHttpClient

HttpClient httpClient = new DefaultHttpClient(params);

// 创建 HttpGet 方法,该方法会自动处理 URL 地址的重定向

HttpGet httpGet = new HttpGet ("");

HttpResponse response = client.execute(httpGet);

if (response.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {

// 错误处理,例如可以在该请求正常结束前将其中断

httpGet.abort();

}

// 读取更多信息

Header[] headers = response.getHeaders();

HttpEntity entity = response.getEntity();

Header header = response.getFirstHeader("Content-Type");

} catch (Exception ee) {

//

} finally {

// 释放连接

client.getConnectionManager().shutdown();

}

以下例子以 HttpGet 方式通过代理访问 HTTPS 网站:

try {

HttpClient httpClient = new HttpClient();

// 设置认证的数据

httpClient.getCredentialsProvider().setCredentials(

new AuthScope("your_auth_host", 80, "your_realm"),

new UsernamePasswordCredentials("username", "password"));

// 设置服务器地址,端口,访问协议

HttpHost targetHost = new HttpHost("", 443, "https");

// 设置代理

HttpHost proxy = new HttpHost("192.168.1.1", 80);

httpClient.getParams().setParameter

(ConnRoutePNames.DEFAULT_PROXY, proxy);

// 创建一个 HttpGet 实例

HttpGet httpGet = new HttpGet("/a/b/c");

// 连接服务器并获取应答数据

HttpResponse response = httpClient.execute(targetHost, httpGet);

// 读取应答数据

int statusCode = response.getStatusLine().getStatusCode();

Header[] headers = response.getHeaders();

HttpEntity entity = response.getEntity();

} catch (Exception ee) {

//

2.3. Android接口

android.net.* 实际上是通过对 Apache 的 HttpClient 的封装来实现的一个 HTTP 编程接口,同时还提供了 HTTP 请求队列管理, 以及 HTTP 连接池管理,以提高并发请求情况下(如转载网页时)的处理效率,除此之外还有网络状态监视等接口。

以下是一个通过 AndroidHttpClient 访问服务器的最简例子:

import import android.net.http.AndroidHttpClient;

try {

AndroidHttpClient client = AndroidHttpClient.newInstance(“your_user_agent”);

// 创建 HttpGet 方法,该方法会自动处理 URL 地址的重定向

HttpGet httpGet = new HttpGet ("");

HttpResponse response = client.execute(httpGet);

if (response.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {

// 错误处理

}

// 关闭连接

client.close();

} catch (Exception ee) {

//

}

Android软件开发主要是学习什么的?

近半年来,手机的安卓系统与ios系统是目前主流的手机系统,Android软件开发主要是学习什么的?IT培训发现安卓开发的技术很多的,如果想一次性学好是不实际的,但下面这些基础还是要学好的。

1、Activity生命周期

虽然Android中有四大组件,但是不可否认Activity是最常用的。所以熟练掌握Android的生命周期是必须的。其实生命周期就是记住Activity的那些方法在什么时候被系统调用,这样才可以把对应的逻辑代码写到合适的方法内部去。

至于服务和广播组件可以稍微缓一下,到实际使用的时候再学习都可以。

2、界面开发技术

界面开发是一种基本的技术,几乎所有的程序里面都需要用到。在Android开发中界面开发分为3种:

1)使用xml文件布局

使用xml首先对于界面进行布局,然后在Activity里面进行引用是最常见的应用软件开发技术,这种方式使用的最大,需要学习的内容也最多。学习时需要熟悉:

a)五种Layout布局

深刻理解五种布局组织控件的方式是一个基本的基础,这样你才可以在实际的界面中灵活的使用每种布局结构,构造出需要的界面。

b)常用控件

控件有很多,至少要知道每种控件是做什么的,至于里面的特定参数和方法可以学要的时候再去查

c)界面美化

系统的控件很多时候无法满足要求,需要通过添加背景更换图片等进行美化,要熟悉每种控件如何去美化。

掌握了上面的内容,通过布局的嵌套就可以制作出各种界面,如果在熟悉include的使用就可以减少xml的重复,方便后期的修改和维护了。

2)使用代码动态创建

有些时候需要动态的创建一些布局和控件,这个就需要使用LayoutInflater去创建一些动态的界面了。

3)自己绘制界面

游戏中常用,继承SurfaceView自己绘制。

3、数据存储技术

Android中的数据存储方式有3种:

1)SharedPrefereneces存储

对于简单的数据可以使用该方式存储,以键值对的方式存储一些基本的数据。

2)文件存储

将数据以文件的形式存储,可以是手机自身的存储也可以是SD卡,文件的数据格式自己定义。

3)SQLite数据库存储

使用标准SQL语句进行操作,复杂数据的首选。

4、网络编程

现在的Android程序不需要联网的已经不多了。所以网络编程也是必须的,一般的公司都会封装有自己的联网结构,但是基本的联网还是要熟悉。

1)HTTP联网

使用Http联网+Json数据格式是现在很多客户端的首选。

2)Socket联网

至于蓝牙等连接方式则可以在项目需要的时候学习。

对于手机的系统功能,如拨打电话、发送短信、读取系统参数等则可以根据需要在学习,不麻烦的。

其次,手机软件相关

Android开发不同于普通的电脑软件开发,需要了解手机的操作习惯,知道手机的屏幕不大、内存有限,电池有限等,在实际开发和设计时尽量考虑。


本文标题:android的网络编程,android网络编程实例
文章地址:http://cdxtjz.cn/article/dsggpos.html

其他资讯