手机本身是作为手机终端使用的,因此它的计算能力,存储能力都是有限的。它的主要优势是携带方便,可以随时打开,而且手机通常总是处于联网状态。因此网络支持对于手机应用非常重要。

Android完全支持JDK本身的TCP,UDP网络通信API,也可以使用ServerSocket,Socket来建立基于TCP/IP协议的网络通信,也可以使用DatagramSocket,Datagrampacket来建立基于UDP协议的网络通信。

Android也支持JDK提供的URL,URLConnection等网络通信API。

Android还内置了HttpClient,和HttpUrlConnection这样可以非常方便地发送HTTP请求,并获取Http响应。

——基于TCP协议的编程

使用Socket,ServerSocket编程:

    使用多线程,handler机制完成网络编程.

    注意:由于手机无线上网的IP地址通常都是由移动运营公司动态分配的,一般不会有自己固定的IP地址,因此很少在手机上运行服务器端,服务器端通常运行在有固定IP的服务器上。

    ①跟网络有关的就要加Internet权限

    ②网络数据的请求要在子线程中进行

    ③更新UI需要借助Handler机制

    ④编码问题:Android默认编码为UTF-8   Java默认编码为GB2312

    ⑤本机IP地址问题:使用127.0.0.1在模拟中不能访问到本地的服务器,因为模拟器也在本机

最后有使用Socket,ServerSocket网络编程的示例

——使用URL进行网络编程

**——使用URL访问网络资源**

   URL对象代表统一资源定位符。它是指向互联网中的资源。该资源可以是简单的文件或目录。也可以是对更复杂的对象的引用。

   URL的格式:protocol://host:port/resourceName

   可以使用构造器创建URL对象,一旦获得URL对象,可以调用如下的方法访问该URL对应的资源:

  String getFile():获取URL的资源名

  String getHost():获取URL的主机名

  String getPath():获取URL的路径部分

  int getPort():获取URL的端口号

  String getProtocol():获取URL的协议名称

  String getQuery():获取URL的查询字符串部分

  InputStream url.openStream():打开URL的连接,返回一个读取该资源的InputStream。

   **——使用URLConnection提交请求**

   URL的openConnection()方法将返回一个URLConnection,该对象表示应用程序和URL之间的通信连接,程序可以通过URLConnection实例向该URL发送请求,读取URL引用的资源。通常创建一个和URL的连接,并发送请求,读取此URL引用的资源。

需要如下步骤:

a)通过调用URL对象openConnection()方法来创建URLConnection对象

b)设置URLConnection的参数和普通请求属性

conn.setRequestProperty("accept","*/*");

conn.setRequestProperty("connection","Keep-Alive");

conn.setRequestProperty("user-agent","Mozilla/4.0(compatible;MSIE 6.0;Windows NT 5.1;SV1)");

conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

//发送POST请求必须设置如下两行**

conn.setDoInput(true):设置该URLConnection的doInput请求头字段的值

coon.setDoOutput(true):

c)调用connect():打开到此URL引用的资源的通信链接(如果尚未建立这样的连接)。

如果在已打开连接(此时 connected 字段的值为 true)的情况下调用 connect 方法,则忽略该调用.

URLConnection 对象经历两个阶段:首先创建对象,然后建立连接。

在创建对象之后,建立连接之前,可指定各种选项(例如doInput和UseCaches).连接后再进行设置就会发生错误。连接后才能进行的操作(例如getContentLength),如有必要,将隐式执行连接.

d)如果只是发送GET方式请求,使用connect方法建立和远程资源之间的实际连接即可,在请求的地址中传入数据。

如果需要发送Post方法请求。需要获取
URLConnection实例对应的输出流来发送请求参数,

PrintWriter out=new PrintWriter(conn.getOutputStream());
 //解决乱码问题

 String n=EncodingUtils.getString("张三".getBytes(),"UTF-8");

 out.write("name="+n+"&pwd="+pwd);

 out.flush();//刷新输出流的缓冲

e)远程资源变为可用,程序可以访问远程资源的头字段或通过输入流读取远程资源的数据。

getInputStream()获取输入流。
从输入流读取response的数据。

注意:

1)如果既要使用输入流读取URLConnection响应的内容,也要使用输出流发送请求参数,一定要先使用输出流,再使用输入流。

2)借助于URLConnection类的帮助,应用程序可以非常方便地与指定站点交换信息,包括发送GET请求,POST请求,并获取网站的响应等。

使用Socket,ServerSocket编程示例:

效果:

android tcp 聊天 android tcp协议_输入流

ServerHuadong为服务器
基于TCPIP协议网络编程为客户端