`

Android学习11Android上的网络编程

 
阅读更多

本文出自:http://blog.csdn.net/kbest/article/details/6411334,谢谢作者给我们提供 这么好的文章,谢谢!

1.基于Socket套接字的网络编程

说到网络开发,首先想到的一定是Socket编程,在游戏开发中,应用最多的网络编程技术也是Socket,下面通过一个例子说明如何在Android平台下完成基于Socket的网络应用开发

首先是服务端的开发,新建一个普通的Java项目,在src目录下新建一个类AndroirdServer其代码如下:

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.ServerSocket;
import java.net.Socket;


public class AndroidServer {
public static void main(String[] args) {
ServerSocket serverSocket = null;
Socket socket = null;
DataInputStream dataInputStream = null;
DataOutputStream dataOutputStream = null;

try {
serverSocket = new ServerSocket(8888); //监听到8888端口
System.out.println("以及监听到8888端口");
} catch (Exception e) {
e.printStackTrace();
}

while(true){
try {
socket = serverSocket.accept(); //等待客户端连接
dataInputStream = new DataInputStream(socket.getInputStream());
dataOutputStream = new DataOutputStream(socket.getOutputStream());//得到输入输出流
String msg = dataInputStream.readUTF(); //读取一个字符串
System.out.println("ip:"+ socket.getInetAddress()); //打印客户端IP
System.out.println("msg" + msg); //打印客户端发来的消息
System.out.println("*********************");
dataOutputStream.writeUTF("Hello Client!"); //像客户端发送消息
} catch (Exception e) {
e.printStackTrace();
}
finally{ //用finally语句块确保动作执行
try{
if(dataOutputStream != null){
dataOutputStream.close(); //关闭输出流
}
if(dataInputStream != null){
dataInputStream.close(); //关闭输入流
}
if(socket != null){
socket.close(); //关闭Socket连接
}
}catch (Exception e) {
e.printStackTrace();
}
}
}
}
}

在AndroidMainfest.xml加一句


<uses-permission android:name = "android.permission.INTERNET" />

布局文件main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<EditText
android:id="@+id/editText"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text = "Hello Server!"
/>

<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="发送信息到服务器"
/>

<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="服务器发来的消息:"
/>
</LinearLayout>

Activity类代码如下:

package karant.zhan;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.Socket;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class AndroidSocket extends Activity implements OnClickListener{

Button button; //button对象引用
EditText editText;
TextView textView;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

button = (Button)findViewById(R.id.button);
editText =(EditText)findViewById(R.id.editText);
textView = (TextView)findViewById(R.id.textView);
button.setOnClickListener(this); //添加监听
}

@Override
public void onClick(View v) {

Socket socket = null;
DataInputStream dataInputStream = null;
DataOutputStream dataOutputStream = null;
if(v == button)
{
try{
socket = new Socket("113.57.79.33" ,8888); //连接服务器
dataOutputStream = new DataOutputStream(socket.getOutputStream()); //得到输出流
dataInputStream = new DataInputStream(socket.getInputStream()); //得到输入流
dataOutputStream.writeUTF(editText.getText().toString()); //向服务器发送消息
textView.setText("服务器发来的消息" + dataInputStream.readUTF()); //接收服务器发来的消息

}catch (Exception e) {
e.printStackTrace();

}finally{
try {
if(dataOutputStream != null){
dataOutputStream.close(); //关闭输出流
}
if(dataInputStream != null){
dataInputStream.close(); //关闭输入流
}
if(socket != null){
socket.close(); //关闭Socket连接
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
}

}
}


2 基于Http协议的网络编程

2.1 通过URL获取网络资源

HTTP协议最简单的应用就是通过URL获取网络资源了,下面的例子是在Android平台下通过URL获取谷歌主页的源代码并显示在滚动的View中

新建项目,为该项目添加网络权限,打开AndroidManifest.xml文件,在</manifest>标记之前加上<uses-permission android:name="android.permission.INTERNET"/>。

Activity类代码如下:

package karant.zhan;

import java.io.BufferedInputStream;
import java.net.URL;
import java.net.URLConnection;

import org.apache.http.util.ByteArrayBuffer;
import org.apache.http.util.EncodingUtils;

import android.R.integer;
import android.app.Activity;
import android.os.Bundle;
import android.widget.ScrollView;
import android.widget.TextView;

public class HttpTest extends Activity {
TextView textView = null;
ScrollView scrollView = null;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
textView = new TextView(this);
scrollView = new ScrollView(this);
URLConnection urlConnection = null;
BufferedInputStream bufferedInputStream = null;
ByteArrayBuffer byteArrayBuffer = null;

try {
URL myURL = new URL("http://www.google.cn/"); //初始化URL
urlConnection = myURL.openConnection(); //打开 连接
bufferedInputStream = new BufferedInputStream(urlConnection.getInputStream()); //通过连接得到输入流
int current = 0;
byteArrayBuffer = new ByteArrayBuffer(1000);
while((current = bufferedInputStream.read()) != -1){
byteArrayBuffer.append((char)current); //将收到的信息添加到ByteArrayBuffer中

}
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
if(bufferedInputStream != null){
bufferedInputStream.close(); //关闭输入流
bufferedInputStream = null;
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
textView.setText(EncodingUtils.getString(byteArrayBuffer.toByteArray(), "UTF-8")); //设置textView的内容
scrollView.addView(textView); //将testView添加到scrollView中
this.setContentView(scrollView); //设置当前显示的用户界面为scrollView

}
}


2.2在Android中解析XML

XML是一种通用的数据交换格式,他的平台无关性,语言无关性,系统无关性为数据集成与交换带来了很大的方便,XML文件解析对Android来说必不可少。

Android中解析XML的方式有两种,一种叫DOM,另一种叫SAX,下面介绍这两种方式

DOM方式:DOM是一种基于XML文档树结构的解析,解析之前通常需要加载整个XML文档和构造结构,之后的解析就是在代码Java代码中通过DOM接口操作之前构造的树结构。DOM方式解析XML的优点是整个XML的树结构存在于内存中,可以很方便的操作,而且可以很轻松地删除XML树结构。但是DOM方式每次须将整个XML文档掉入内存,而往往只是对期中很小一部分进行操作,这就浪费了很多资源。

SAX方式。SAX是一种基于事件流的解析方式。解析之前不需要加载整个XML文档,而是当解析器遇到某些标记触发一些事件,开发人员编写响应这些事件的代码来做相应的处理。所以SAX方式解析XML比较迅速,而且节约资源。但是因为i在解析过程中并没有加载XML,所有SAX方式解析的数据不持久,如果没有及时保存的话,很容易丢失。又因为SAX方法得到的文本并不知道属于哪个元素下的,所以操作有些局限。


本文出自:http://blog.csdn.net/kbest/article/details/6411334,谢谢作者给我们提供 这么好的文章,谢谢!

1.基于Socket套接字的网络编程

说到网络开发,首先想到的一定是Socket编程,在游戏开发中,应用最多的网络编程技术也是Socket,下面通过一个例子说明如何在Android平台下完成基于Socket的网络应用开发

首先是服务端的开发,新建一个普通的Java项目,在src目录下新建一个类AndroirdServer其代码如下:

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.ServerSocket;
import java.net.Socket;


public class AndroidServer {
public static void main(String[] args) {
ServerSocket serverSocket = null;
Socket socket = null;
DataInputStream dataInputStream = null;
DataOutputStream dataOutputStream = null;

try {
serverSocket = new ServerSocket(8888); //监听到8888端口
System.out.println("以及监听到8888端口");
} catch (Exception e) {
e.printStackTrace();
}

while(true){
try {
socket = serverSocket.accept(); //等待客户端连接
dataInputStream = new DataInputStream(socket.getInputStream());
dataOutputStream = new DataOutputStream(socket.getOutputStream());//得到输入输出流
String msg = dataInputStream.readUTF(); //读取一个字符串
System.out.println("ip:"+ socket.getInetAddress()); //打印客户端IP
System.out.println("msg" + msg); //打印客户端发来的消息
System.out.println("*********************");
dataOutputStream.writeUTF("Hello Client!"); //像客户端发送消息
} catch (Exception e) {
e.printStackTrace();
}
finally{ //用finally语句块确保动作执行
try{
if(dataOutputStream != null){
dataOutputStream.close(); //关闭输出流
}
if(dataInputStream != null){
dataInputStream.close(); //关闭输入流
}
if(socket != null){
socket.close(); //关闭Socket连接
}
}catch (Exception e) {
e.printStackTrace();
}
}
}
}
}

在AndroidMainfest.xml加一句


<uses-permission android:name = "android.permission.INTERNET" />

布局文件main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<EditText
android:id="@+id/editText"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text = "Hello Server!"
/>

<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="发送信息到服务器"
/>

<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="服务器发来的消息:"
/>
</LinearLayout>

Activity类代码如下:

package karant.zhan;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.Socket;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class AndroidSocket extends Activity implements OnClickListener{

Button button; //button对象引用
EditText editText;
TextView textView;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

button = (Button)findViewById(R.id.button);
editText =(EditText)findViewById(R.id.editText);
textView = (TextView)findViewById(R.id.textView);
button.setOnClickListener(this); //添加监听
}

@Override
public void onClick(View v) {

Socket socket = null;
DataInputStream dataInputStream = null;
DataOutputStream dataOutputStream = null;
if(v == button)
{
try{
socket = new Socket("113.57.79.33" ,8888); //连接服务器
dataOutputStream = new DataOutputStream(socket.getOutputStream()); //得到输出流
dataInputStream = new DataInputStream(socket.getInputStream()); //得到输入流
dataOutputStream.writeUTF(editText.getText().toString()); //向服务器发送消息
textView.setText("服务器发来的消息" + dataInputStream.readUTF()); //接收服务器发来的消息

}catch (Exception e) {
e.printStackTrace();

}finally{
try {
if(dataOutputStream != null){
dataOutputStream.close(); //关闭输出流
}
if(dataInputStream != null){
dataInputStream.close(); //关闭输入流
}
if(socket != null){
socket.close(); //关闭Socket连接
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
}

}
}


2 基于Http协议的网络编程

2.1 通过URL获取网络资源

HTTP协议最简单的应用就是通过URL获取网络资源了,下面的例子是在Android平台下通过URL获取谷歌主页的源代码并显示在滚动的View中

新建项目,为该项目添加网络权限,打开AndroidManifest.xml文件,在</manifest>标记之前加上<uses-permission android:name="android.permission.INTERNET"/>。

Activity类代码如下:

package karant.zhan;

import java.io.BufferedInputStream;
import java.net.URL;
import java.net.URLConnection;

import org.apache.http.util.ByteArrayBuffer;
import org.apache.http.util.EncodingUtils;

import android.R.integer;
import android.app.Activity;
import android.os.Bundle;
import android.widget.ScrollView;
import android.widget.TextView;

public class HttpTest extends Activity {
TextView textView = null;
ScrollView scrollView = null;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
textView = new TextView(this);
scrollView = new ScrollView(this);
URLConnection urlConnection = null;
BufferedInputStream bufferedInputStream = null;
ByteArrayBuffer byteArrayBuffer = null;

try {
URL myURL = new URL("http://www.google.cn/"); //初始化URL
urlConnection = myURL.openConnection(); //打开 连接
bufferedInputStream = new BufferedInputStream(urlConnection.getInputStream()); //通过连接得到输入流
int current = 0;
byteArrayBuffer = new ByteArrayBuffer(1000);
while((current = bufferedInputStream.read()) != -1){
byteArrayBuffer.append((char)current); //将收到的信息添加到ByteArrayBuffer中

}
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
if(bufferedInputStream != null){
bufferedInputStream.close(); //关闭输入流
bufferedInputStream = null;
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
textView.setText(EncodingUtils.getString(byteArrayBuffer.toByteArray(), "UTF-8")); //设置textView的内容
scrollView.addView(textView); //将testView添加到scrollView中
this.setContentView(scrollView); //设置当前显示的用户界面为scrollView

}
}


2.2在Android中解析XML

XML是一种通用的数据交换格式,他的平台无关性,语言无关性,系统无关性为数据集成与交换带来了很大的方便,XML文件解析对Android来说必不可少。

Android中解析XML的方式有两种,一种叫DOM,另一种叫SAX,下面介绍这两种方式

DOM方式:DOM是一种基于XML文档树结构的解析,解析之前通常需要加载整个XML文档和构造结构,之后的解析就是在代码Java代码中通过DOM接口操作之前构造的树结构。DOM方式解析XML的优点是整个XML的树结构存在于内存中,可以很方便的操作,而且可以很轻松地删除XML树结构。但是DOM方式每次须将整个XML文档掉入内存,而往往只是对期中很小一部分进行操作,这就浪费了很多资源。

SAX方式。SAX是一种基于事件流的解析方式。解析之前不需要加载整个XML文档,而是当解析器遇到某些标记触发一些事件,开发人员编写响应这些事件的代码来做相应的处理。所以SAX方式解析XML比较迅速,而且节约资源。但是因为i在解析过程中并没有加载XML,所有SAX方式解析的数据不持久,如果没有及时保存的话,很容易丢失。又因为SAX方法得到的文本并不知道属于哪个元素下的,所以操作有些局限。

分享到:
评论

相关推荐

    Android网络编程

    Android网络编程Android网络编程Android网络编程Android网络编程Android网络编程Android网络编程Android网络编程Android网络编程

    android网络编程基础

    android 网络编程基础;android 网络编程基础;android 网络编程基础

    Android网络编程 非常适合入门

    Android网路编程代码 设计客户端和服务器端通信 适合初学者学习 当然其中包括很多其他知识点 例如基于handler的主副线程通信机制 多线程应用等 另外 对于Android入门的学习者 也是一手极好的学习资料 下载即可运行 ...

    Android网络编程-聊天室开发

    本资料详细介绍了android如何应用socket进行网络编程,详细介绍了android用socket进行聊天室开发,包含服务器端与Android客户端的开发过程介绍,开有详细代码及解释说明,非常适应android网络编程初学者或教师教学...

    android网络编程.pdf

    android网络编程访问网络,http传输数据,浏览网页,蓝牙通信

    android网络编程面试题,Android面试题整理

    android网络编程面试题,Android面试题整理

    Android 4.0网络编程指南 part3

    Android网络编程

    Android高级编程pdf

    作为使用AndroidSDK构建这些应用程序的实用指南书籍,《Android高级编程》从始至终穿插了一系列示例项目,每个项目都引入Android的新功能和新技术,以助您达到最圆满的学习效果。书中介绍Android的所有基本功能,并...

    Android 的网络编程

    Android 网络编程,Android 网络编程,Android 网络编程,Android 网络编程

    Android网络编程Demo

    Android网络编程Demo 此Demo博客地址:http://blog.csdn.net/u012814441/article/details/49643865

    Android 网络编程入门之图片下载

    Android 网络编程入门之图片下载,搭建Tomcat作为服务器,下载网络图片。

    android 网络编程简介

    Dive_Into_Android_Networking-_Adding_Ethernet_Connectivity 初学者入门介绍

    Android网络编程总结

    这是关于安卓网络开发的一些源代码,是相关博客文章讲到的

    Android 4.0网络编程详解卷二(共两卷)

    内容包括:1.Android开发环境的搭建和测试 2.Android的软件测试和调试 3.Android网络下的XML和JSON 4.HTTP协议剖析 ... 7.Android中的Socket编程 8.Android中的浏览器编程 9.彻底剖析Android中软件的启动和退出

    java与Android学习指南

    精简、侧重 1、Java基础第七讲:面向对象基础(一) « { Android学习指南 }_files 2、Java基础第八讲:面向对象基础(二) « { Android学习指南 }_...12、第二十一讲:网络编程(一) « { Android学习指南 }_files

    Android 4.0网络编程详解.part1

    Android 4.0 网络编程详解,分两个包上传 现在开始将免费进行到底

    android编程权威指南 Big Nerd Ranch

    android编程权威指南英文版pdf 带标签 Big Nerd Ranch 是美国专业的移动开发技术培训机构,本书主要以训练营的 5 天教学课程为基础,融合了两位作者多年的心得体会,是一本完全面向实战的 Android 编程权威指南。...

    android网络编程

    网络编程,从服务器上获取数据,将服务器从数据库上查到的数据解析成json字符串,之后android将字符串重新解析成Java对象

    android图形系统编程学习

    android图形系统编程学习 可以帮你刚好的学习android的学习

    《Android编程入门教程》

    里面包括了《Java语言基础从入门到熟悉》、《Kotlin语言基础从入门到熟悉》、《Android 技术栈从入门到熟悉》、《Android Jetpack 全家桶全面学习》

Global site tag (gtag.js) - Google Analytics