HTTP协议:
HTTP协议定义了浏览器怎样向服务器请求文档,以及服务器怎样将文档传给服务器,从层次角度来看,HTTP是面向应用层的协议,它是万维网能够可靠的交换文件的基础.
HTTP协议的工作流程:
1)首先客户机与服务器需要建立连接,只要单击某个超级连接,HTTP的工作就开始了.
2)建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源定位符(URL),协议版本号,后面是MIME信息包括请求修饰符,客户机信息和可能的内容.
3)服务器接收到请求后,给予相应的响应信息,其状态为一个状态行,包括信息的协议版本号,一个成功或错误标识的代码,后面是MIME信息,实体信息和可能的内容.
4)客户端接收服务器所返回的信息,通过浏览器显示在用户的显示屏上,然后客户机与服务器断开.
URL:
URL统一资源定位符,也被称为网页地址.
URL的格式由下列三部分组成:
第一部分是协议(或称为服务方式)http://
第二部分是存有该资源的主机IP地址(有时包含端口号,互联网中默认端口号为80)
第三部分是主机资源的具体地址,如目录和文件名等.
TCP/IP的三次握手:
SYN(synchronous)是TCP/IP建立连接时使用的握手信号,在客户机和服务器之间建立正常的TCP网络连接时,客户机首先发出一个SYN信息,服务器使用SYN+ACK应答表示接收到了这个消息,最后客户机再以ACK消息响应,这样客户机和服务器之间才能建立起可靠的TCP连接,数据才可以在客户机和服务器之间传递.
ACK(acknowledgement),即确认字符,在数据通信中,接收站发给发送站的一种传输类控制符,表示发来的数据已准确接收无误.
HTTP协议的特点:
1.支持客户/服务器模式
2.简单快速:客户向服务器请求服务时,只需传送请求方法到路径,请求方法常用的又GET,POST,UPLOAD,每种方法规定了客户与服务器联系的类型不同,由于HTTP协议简单,使得HTTP服务器的程序规模小,因而传输速度很快.
3.灵活:HTTP允许传输任意类型的数据对象,正在传输的类型由CONTENT-TYPE加以标记.
4.无连接:无连接的含义是限制每次连接只处理一个请求,服务器处理完客户的请求,并收到客户的应答后,即断开连接,采用这种方法可以节省传输时间.
5.无状态:HTTP协议是无状态协议,无状态是指协议对于事务处理是没有记忆能力的,缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传输的数据量较大,另一方面,在服务器不需要先前信息时它的应答较快.
HttpURLConnection使用步骤:
1.利用服务器地址创建一个URL.
2.创建一个HttpUrlConnection实例,通过httpUrl.openConnection()
3.设置一些连接属性,请求方式,连接响应最大时长,doInput,doOutput;
4.如果是post方式请求,可以通过HttpUrlConnection获取一个outPutStream,并在outPutStream中调用out.write()传递相应的数据,最后调用out.flush()将输出流中数据输出,关闭输出流.
5.获取服务器的返回值,可以通过HttpUrlConnection.getInputStream()获取服务器返回的数据(事实上,在getInputStream时才真正开始向服务器发送数据)
6.建立一个buffer,调用InputStram.read()将InputStream中的数据放到buffer中,然后将buffer中的数据写到一个outStream中,最后将outStream转化为二进制数据.
7.传送给服务器的中文可能会出现乱码,可以使用URLEncoder方法来将中文转码,而Android中的编码方式为utf-8,所以使用post可以不用转码.
HttpClient的请求步骤(GET):
1.创建HttpClient httpGet = new HttpGet(URL);
2.创建HttpClient对象HttpClient client = new DefaultHttpClient();
3.获取相应信息HttpResponse reponse = client.execute(httpGet);
4.解析响应信息,String content = EntityUtils.toString(response.getEntity());
HttpClient的请求步骤(POST):
1.创建HttpPost对象,HttpPost httpPost = new HttpPost(URL);
2.创建一个list<NameValuePair>用于保存请求参数,ArrayList<NameValuePair>,然后调用list.add(new BasicNameValuePair(Key,Value));添加请求参数
3.使用httpPost.setEntity(new UrlEncodedFormEntity(list))设置请求的content.
4.HttpResponse reponse = client.execute(httpPost);获取返回的数据
Json格式定义:
Json简单说就是javaScript中的对象和数组,所以这两张结构就是对象和数组两种结构,通过这两种结构可以表示各种复杂的结构.
1.对象:对象在Json中表示为"{}"中的内容,数据结构为{key:value,key:value,.....}的键值对结构,在面向对象的语言中,key为对象的属性,value为对应属性值,所以很容易理解.
2.数组数组在Json结构中用中括号"[]"表示,数据结构为["java":"javaScript","C":"C++",....]