网络通信机制:Socket、TCP/IP、HTTP

13.1.1 TCP/IP协议

讲的很抽象,没具体看懂什么是TCP协议,什么是IP协议。IP协议保证消息从一个主机传送到另一个主机,消息在传送的过程中被分割成一个个小包,TCP协议会让两台相互连接的计算机建立一个连接:用于发送和接收数据的虚拟链路。

TCP协议和IP协议是两个协议,但是通常一起使用,两者功能上互相补充,统称TCP/IP协议。

13.1.2 使用ServerSocket创建TCP服务器端

Java中ServerSocket用于接收来自客户端Socket的连接请求。

accept()方法用于接收一个客户端Socket的连接请求,返回值是与客户端Socket对应的服务器端的Socket。该方法是阻塞方法。

ServerSocket提供了几个构造器:

ServerSocket(int port):port表示一个端口(0~65535),通常推荐1024以上的端口。

ServerSocket(int port,int backlog)、ServerSocket(int port,int backlog,InetAddress localAddr)表示目前没有用过。

服务器端使用完毕后应该用close()方法关闭,因为涉及到有关流的操作。

13.1.3 使用Socket进行通信

客户端可以使用Socket向服务器端发送链接请求,构造方法:

Socket(InetAddress/String remoteAddress,int port):比较常用

Socket(InetAddress/String remoteAddress,int port,InetAddress localAddr,int localPort):适用于主机有多个IP地址的情况

Socket通过得到输入输出流进行通信:

getInputStream():返回InputStream

getOutputStream():返回OutputStream

Android访问互联网,需要添加权限:


对Socket的setSoTimeout(int timeout)方法的说明:

1、该方法表示Socket调用InputStream的read()方法的阻塞时间,如果超过这个时间将抛出异常,但是此时Socket是有效的(此时的Socket仍然可以进行读写数据流的操作);

2、设置setSoTimeout()方法必须在Socket进入阻塞方法之前,否则无效。

setSoTimeout()方法表示Socket进行读操作的阻塞时间,如果要设置Socket的连接服务器的超时时间:

Socket s=new Socket();//创建一个无连接的Socket

s.connect(new SocketAddress(new SocketAddress(host,port),timeout);//让该Socket连接到远程服务器,如果经过timeout还没有连接到,则认为连接超时

13.2使用URL访问网络资源

URL表示指向互联网资源的一个指针,通常的格式是:

protocol(协议)://host(主机):port(端口)/resourceName(资源)

主要方法:

URLConnection openConnection():返回一个URLConnection对象,表示到URL所引用远程对象的连接。

InputStream openStream():打开与此URL的连接,并返回一个用于读取该URL资源的InputStream。

13.2.2使用URLConnection提交请求

应用程序可以使用URLConnection向该URL发送请求,读取URL引用的资源。

和URL建立连接,发送请求,并读取此URL引用的资源的步骤:

1、调用URL的openConnection(),返回URLConnection对象;

2、设置URLConnection对象的参数和请求属性;

3、如果是发送GET请求,使用connect方法即可,如果是POST请求,需要先获取输出流来发送请求;

4、远程资源可用,应用程序可以访问该资源的头字段,或者输入流来读取该资源。

13.3.2使用ApacheHttpClient

Apache提供的开源项目HttpClient不仅可以处理HttpURLConnection的功能,还可以维护和服务器之间的Session、Cookie。

即HttpClient专注于发送请求,接收响应以及管理HTTP连接。

13.4使用WebView视图显示网页

WebView本身可以看做是一个浏览器实现,它的内核是基于WebKit引擎。

13.4.1使用WebView浏览网页

WebView提供了大量的方法执行浏览器操作,比如前进、后退、加载网页等。

13.4.2使用WebView加载HTML代码

WebView提供了loadDataWithBaseURL(String baseUrl,String data,String mimeType,String encoding,String historyUrl)方法加载并显示HTML代码,该方法的参数说明是:

data:指定需要加载的HTML代码

mimeType:指定HTML代码的MIME类型,对于HTML代码指定为text/html

encoding:指定HTML代码编写所用的字符集,比如指定为GBK

13.4.3使用WebView中的JavaScript调用Android方法

在WebView中通过JavaScript调用Android方法的步骤:

1、调用WebView关联的WebSettings的setJavaScriptEnabled(true)启用JavaScript调用功能。

2、调用WebView的addJavaScriptInterface(Object object,String name)方法将object对象暴露给JavaScript。

3、在JavaScript脚本中通过刚才暴露的name对象调用Android方法。

13.5使用Web Service进行网络编程

为了让Android应用和服务器之间进行交互的技术:

1、Java的RMI技术:要求服务器端使用Java实现;

2、CORBA技术:实现过于复杂;

3、Web Service;

13.5.1 Web Service平台概述

Web Service平台主要涉及的技术有SOAP(简单对象访问协议)、WSDL(Web Service描述语言)、UDDI(统一描述、发现和整合协议)。

13.5.2 使用Android应用调用Web Service

Android项目可以通过ksoap2-android项目来调用Web Service操作。
原文地址:https://www.cnblogs.com/mxzhan/p/13340931.html