精华内容
下载资源
问答
  • ⼀种⽹络传输协议,位于 TCP / IP 协议族的最顶层——应⽤层 HTTP Hypertext Transfer Protocol,超⽂本传输协议,和 HTML (Hypertext Markup Language 超⽂本标 记语⾔) ⼀起诞⽣,⽤于在⽹络上请求和传输 HTML ...

    HTTP 的定义
    ⼀种⽹络传输协议,位于 TCP / IP 协议族的最顶层——应⽤层
    HTTP
    Hypertext Transfer Protocol,超⽂本传输协议,和 HTML (Hypertext Markup Language 超⽂本标
    记语⾔) ⼀起诞⽣,⽤于在⽹络上请求和传输 HTML 内容

    HTTP 的⼯作⽅式
    浏览器:
    ⽤户输⼊地址后回⻋或点击链接 -> 浏览器拼装 HTTP 报⽂并发送请求给服务器 -> 服务器处理请求后
    发送响应报⽂给浏览器 -> 浏览器解析响应报⽂并使⽤渲染引擎显示到界⾯
    ⼿机 App:
    ⽤户点击或界⾯⾃动触发联⽹需求 -> Android 代码调⽤拼装 HTTP 报⽂并发送请求到服务器 -> 服务
    器处理请求后发送响应报⽂给⼿机 -> Android 代码处理响应报⽂并作出相应处理(如储存数据、加⼯
    数据、显示数据到界⾯)
    URL 和 HTTP 报⽂
    URL 格式
    三部分:协议类型、服务器地址(和端⼝号)、路径(Path)
    协议类型://服务器地址[:端⼝号]路径
    http://hencoder.com/users?gender=male
    报文格式
    在这里插入图片描述
    在这里插入图片描述

    GET
    ⽤于获取资源
    对服务器数据不进⾏修改
    不发送 Body

    GET /users/1 HTTP/1.1
    Host: api.github.com
    

    POST
    ⽤于增加或修改资源
    发送给服务器的内容写在 Body ⾥⾯

    POST /users HTTP/1.1
    Host: api.github.com
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 13
    name=rengwuxian&gender=male
    

    PUT
    ⽤于修改资源
    发送给服务器的内容写在 Body ⾥⾯

    PUT /users/1 HTTP/1.1
    Host: api.github.com
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 13
    gender=female
    

    HEAD
    和 GET 使⽤⽅法完全相同
    和 GET 唯⼀区别在于,返回的响应中没有 Body
    Status Code 状态码
    三位数字,⽤于对响应结果做出类型化描述(如「获取成功」「内容未找到」)。
    1xx:临时性消息。如:100 (继续发送)、101(正在切换协议)
    2xx:成功。最典型的是 200(OK)、201(创建成功)。
    3xx:重定向。如 301(永久移动)、302(暂时移动)、304(内容未改变)。
    4xx:客户端错误。如 400(客户端请求错误)、401(认证失败)、403(被禁⽌)、404(找
    不到内容)。
    5xx:服务器错误。如 500(服务器内部错误)。
    Header ⾸部
    作⽤:HTTP 消息的 metadata。
    Host
    ⽬标主机。注意:不是在⽹络上⽤于寻址的,⽽是在⽬标服务器上⽤于定位⼦服务器的
    Content-Type
    指定 Body 的类型。主要有四类:
    1. text/html
    请求 Web ⻚⾯是返回响应的类型,Body 中返回 html ⽂本。格式如下:

    HTTP/1.1 200 OK
    Content-Type: text/html; charset=utf-8
    Content-Length: 853
    <!DOCTYPE html>
    <html>
    <head>
     <meta charset="utf-8">
    ......
    

    application/json , image/jpeg , application/zip …
    单项内容(⽂本或⾮⽂本都可以),⽤于 Web Api 的响应或者 POST / PUT 的请求
    请求中提交⼆进制内容

    POST /user/1/avatar HTTP/1.1
    Host: hencoder.com
    Content-Type: image/jpeg
    Content-Length: 1575
    JFIFHH9......
    

    Content-Length
    指定 Body 的⻓度(字节)
    Location
    指定重定向的⽬标 URL
    User-Agent
    ⽤户代理,即是谁实际发送请求、接受响应的,例如⼿机浏览器、某款⼿机 App。
    Range / Accept-Range
    按范围取数据
    Accept-Range: bytes 响应报⽂中出现,表示服务器⽀持按字节来取范围数据
    Range: bytes=- 请求报⽂中出现,表示要取哪段数据
    Content-Range:-/total 响应报⽂中出现,表示发送的是哪段数据
    作⽤:断点续传、多线程下载
    其他 Headers
    Accept: 客户端能接受的数据类型。如 text/html
    Accept-Charset: 客户端接受的字符集。如 utf-8
    Accept-Encoding: 客户端接受的压缩编码类型。如 gzip
    Content-Encoding:压缩类型。如 gzip
    Cache
    作⽤:在客户端或中间⽹络节点缓存数据,降低从服务器取数据的频率,以提⾼⽹络性能。
    REST
    REST 的定义众说纷纭,没有统⼀答案。
    扔物线的观点:REST HTTP 即正确使⽤ HTTP。包括:
    使⽤资源的格式来定义 URL

    HTTP/1.1 200 OK
    Content-Type: text/html
    Transfer-Encoding: chunked
    4
    Chun
    9
    ked Trans
    12
    fer Encoding
    0
    规范地使⽤ method 来定义⽹络请求操作
    规范地使⽤ status code 来表示响应状态
    其他符合 HTTP 规范的设计准则

    展开全文
  • 网络连接的类型: 1.单工:在通信过程的任意时刻,信息只能由一方A传递到另一方B,比如无线广播。 2.半双工:在任意时刻,信息即可由A传到B,又能由B传A,但只能由一个方向上的传输存在。 比如:Http协议,同一...

    网络连接的类型:

    1.单工:在通信过程的任意时刻,信息只能由一方A传递到另一方B,比如无线广播。

    2.半双工:在任意时刻,信息即可由A传到B,又能由B传A,但只能由一个方向上的传输存在。

       比如:Http协议,同一时刻数据只能单向流动,客户端向服务端请求数据或者服务端向客户端相应数据。

    3.全双工:在任意时刻,线路上存在A到B和B到A的双向信号传输。

       例如: Socket协议、Websocket协议、电话Socket的协议是支持全双工的,发送数据的同时也可以接收数据。

    http和https详解

     

    展开全文
  • 这是一个安卓端采用udp协议实现数据的发送和接受的demo
  • 安卓网络请求http协议

    2017-01-11 11:18:57
    Upgrade 可以用来指定一个完全不同的通信协议,对于这个字段,服务器可以返回101状态码 请求首部字段 Accept 指用户代理能够处理的媒体类型及媒体类型的相对优先级 Accept-Encoding 指用来告知服务器用户代理...

    请求返回码

    2XX 成功
    - 200 OK,表示从客户端发来的请求在服务器端被正确处理
    - 204 No content,表示请求成功,但响应报文不含实体的主体部分
    - 206 Partial Content,进行范围请求

    3XX 重定向

    • 301 moved permanently,永久性重定向,表示资源已被分配了新URL
    • 302 found,临时性重定向,表示资源临时被分配了新的 URL
    • 303 see other,表示资源存在着另一个 URL,应使用 GET 方法丁香获取资源
    • 304 not modified,表示服务器允许访问资源,但因发生请求未满足条件的情况
    • 307 temporary redirect,临时重定向,和302含义相同

    4XX 客户端错误
    - 400 bad request,请求报文存在语法错误
    - 401 unauthorized,表示发送的请求需要有通过 HTTP 认证的认证信息
    - 403 forbidden,表示对请求资源的访问被服务器拒绝
    - 404 not found,表示在服务器上没有找到请求的资源

    5XX 服务器错误
    - 500 internal sever error,表示服务器端在执行请求时发生了错误
    - 503 service unavailable,表明服务器暂时处于超负载或正在停机维护,无法处理请求

    HTTP 首部

    通用首部

    指请求报文和响应报文都可以使用的字段

    Cache-Control
    no-cache 指客户端不缓存过期资源
    no-store 指不进行缓存
    max-age 指缓存资源的缓存时间比指定的值小,那么客户端就接受缓存资源,且缓存服务器不对资源有效性进行再次确认
    Connection 指控制不再转发给代理的首部字段(Hop-by-hop),管理持久连接
    close 指服务器像明确断开连接
    Keep-Alive 指保存持久连接,HTTP/1.1前默认连接是非持久性的,如需要保存持久连接,需要增加此字段
    Upgrade 可以用来指定一个完全不同的通信协议,对于这个字段,服务器可以返回101状态码
    请求首部字段

    Accept 指用户代理能够处理的媒体类型及媒体类型的相对优先级
    Accept-Encoding 指用来告知服务器用户代理支持的内容编码及内容编码的优先级顺序
    Authorization 指用来告知服务器,用户代理的认证信息
    Host 当一个 IP 下存在多个域名时,帮助服务器知道要请求的具体主机
    User-Agent 会讲创建请求的浏览器和用户代理名称等信息传达给服务器

    展开全文
  •  首先我们需要获取到HttpURLConnection的实例,一般只需new出一个URL对象,并传入目标网络地址,然后调用一下openConnection()方法即可,如下所示:  URL = url = new URL("http://www.baidu.com");  ...

    1、HTTP工作原理:客户端向服务器发出一条HTTP请求,服务器收到请求之后会返回一些数据给客户端,然后客户端在对这些数据进行解析和处理就可以了。从WebView的用法中其实也就是我们向百度服务器发送一条HTTP请求,接着WebView再调用手机浏览器内核对返回的HTML代码进行解析,最终将页面展现出来,不过WebView已经在后台帮我们处理好了发送HTTP请求、接受服务器响应、解析返回数据以及最终页面展示这几步工作。


    2、使用HttpURLConnection
      首先我们需要获取到HttpURLConnection的实例,一般只需new出一个URL对象,并传入目标网络地址,然后调用一下openConnection()方法即可,如下所示:
      URL = url = new URL("http://www.baidu.com");
      HttpURLConnection connection = (HTTPURLConnection)url.openConnection();
    在得到了HTTPURLConnection的实例之后,我们可以设置一下HTTP请求所使用的方法。常用的有两种:GET和POST.GET表示希望从服务器那里获得数据,而POST则表示希望提交数据给服务器。写法如下:
       connection.setRequestMethod("GET");
       
       接下来就可以进行一些自由定制了,比如设置连接超时,读取超时毫秒数,以及服务器希望得到的一些消息头等。这部分内容根据自己的实际情况进行编写,实例方法如下:
       connection.setConnectTimeout(8000);
       connection.setReadTimeout(8000);
       
    之后在调用getInputStream()方法就可以获取到服务器返回的输入流了,剩下的就是对输入流进行读取,如下所示:
       InputStream in = connection.getInputStream();
       最后可以调用disconnect()方法将这个HTTP连接关闭掉,如下所示:
       connection.disconnect();

       

    下面进行项目实战

       main.xml
       <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">


        <Button
            android:id="@+id/send_request"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Send Request"/>
        <ScrollView
            android:layout_width="match_parent"
            android:layout_height="match_parent">
        <TextView
            android:id="@+id/response_text"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
        </ScrollView>
    </LinearLayout>
       
     代码分析:这里我们使用了一个新的控件ScrollView,以滚动的形式查看屏幕外的那部分内容,布局中还放置了一个Button和一个TextView,Button用于发送HTTP请求,TextView用于将服务器返回的数据显示出来。

    MainActivity.java
    package com.example.administrator.httpurlconnection;


    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.TextView;


    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.net.HttpURLConnection;
    import java.net.URL;


    public class MainActivity extends AppCompatActivity implements 


    View.OnClickListener {


        TextView responseText;


        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            Button sendRequest = (Button) findViewById(R.id.send_request);
            responseText = (TextView) findViewById(R.id.response_text);
            sendRequest.setOnClickListener(this);
        }


        @Override
        public void onClick(View v) {
            if (v.getId() == R.id.send_request){
                sendRequestWithHttpURLConnection();//调用 


    sendRequestWithHttpURLConnection()方法
            }
        }


        private void sendRequestWithHttpURLConnection() {


            //开启线程来发起网络请求
            new Thread(new Runnable() {
                @Override
                public void run() {
                    HttpURLConnection connection = null;
                    BufferedReader reader = null;
                    try{
                        URL url = new URL("https://www.baidu.com");//请求目标地址百度首



                        connection = (HttpURLConnection) url.openConnection();
                        connection.setRequestMethod("GET");
                        connection.setConnectTimeout(8000);
                        connection.setReadTimeout(8000);
                        InputStream in = connection.getInputStream();
                        //下面对获取到的输入流进行读取
                        reader = new BufferedReader(new InputStreamReader(in));
                        StringBuilder response = new StringBuilder();
                        String line;
                        while ((line = reader.readLine()) != null){
                            response.append(line);
                        }
                        showResponse(response.toString());
                    }catch (Exception e){
                            e.printStackTrace();
                    }finally {
                        if (reader != null){
                            try{
                                reader.close();
                            }catch (IOException e){
                                e.printStackTrace();
                            }
                        }
                        if (connection != null){
                            connection.disconnect();
                        }
                    }
                }
            }).start();
        }
        private void showResponse(final String response) {
            runOnUiThread(new Runnable() {//你明磊参数进行操作,将返回的数据进行读取,并


    将结果传入到了showResponse()方法中,将线程切换到主线程,然后将更新UI元素
                @Override
                public void run() {
                    //在这里进行UI操作
                    responseText.setText(response);
                }
            });
        }
    }
    注意:申明网络权限 <uses-permission android:name="android.permission.INTERNET"/>
    展开全文
  • 安卓http协议使用程序

    2013-07-30 12:49:56
    该程序实现了使用http协议网络上的图片下载到本地,在安卓2.0以上任何版本均可使用,欢迎有需要的朋友前来探讨...
  •  我们要实现网络互联,需要思考两个解决的技术要点  一个是:浏览器和服务器是通过什么连接的 -----通过Internet去发送到服务器中。具体底层技术不探讨  另一个是:这种连接方式是怎么实现的  我们通过...
  • 目标的网络地址,然后调用一下 openConnection()方法 。 2, 我们可以设置一下 HTTP 请求所使用的方法。 常用的方法主要有两个, GET 和 POST。 GET 表示希望从服务器那里获取数据,而 POST 则 表示希望提交数据给...
  • 零、前言 1.初衷 安卓一大堆网络框架,会用倒是会用,但总觉得封装得太多...为了更清晰的认识网络,打算从起点来看一下安卓的安卓网络编程 2.本文测试的url为已在服务器上,可访问: 访问返回Json地址:ht...
  • 协议的封装和抽取这块比较复杂,序列化和反序列化,自己做了一点总结,希望大家多多指点。 一.为什么要进行协议封装 以往的处理方式:利用XmlSerializer一点点编写协议序列化代码 存在问题(假设我们有100个...
  • 用HTTP协议访问网络时connection.setConnectTimeout(5000);时如果时间超过的5000程序可以运行但是后台会报错网络连接超时 java.net.SocketTimeoutException: failed to connect to /192.168.1.110 (port 80) after ...
  • 微信安卓协议分析笔记

    万次阅读 热门讨论 2018-03-29 18:02:19
     网上没找到SDK可以分析,关于微信安卓协议的文章也比较少,比较有用的是,这篇论文里介绍了微信使用RSA2048与AES-CBC-128结合的加密算法以及使用protobuf编码格式传输数据;帖子里提到微信使用长短链接结合的网络...
  • 安卓网络相关

    2018-08-30 22:13:38
    安卓网络通信的方式可以大致分为两种,一种是Socket通信一种是HttpUrl通信 Socket通信 Socket通信支持Http协议(三次握手)和PPP协议,前者在通信的过程中有进行三次握手,可以保证数据的完整性,后者则不能; ...
  • TCP/IP协议
  • 安卓中进行http协议网络访问有两种方式: 1.HttpClient (它由apache开发) 2.HttpURLConnection(google在发布安卓时在Java基础上修改得到的) 使用HC(HttpClient)/UC(HttpURLConnection)进行网络访问的基本...
  • Toast.makeText(this,"网络不可用",Toast.LENGTH_SHORT).show(); } } //检查网络是否可用 public boolean isNetworkConnected(Context context) { if(context!=null) { ConnectivityManager ...
  • 安卓网络编程

    2013-09-09 16:51:10
    这几天一直在搞跟网络编程相关的东西,这里整理了一下关于socket网络编程以及http协议的基本用法。省的自己以后再用或者其他人学习方便。首先是基于socket的网络编程android的网络编程部分,基本上和java的网络编程...
  • //开启线程来发送网络请求 new Thread(new Runnable(){ @Override public void run(){ HttpURLConnection connection = null; BufferedReader reader =null; try{ URL url =new URL("https://www.baidu.com"...
  • Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。HTTP是一个客户端和服务器端请求和应答的标准(TCP)。客户端是终端用户,服务器端是网站。通过使用Web浏览器、网络...
  • 接着我的第一篇,我们来探讨一下,假如...这里给出两种方法去网络进行验证,同样的第一种是通过HttpClient,第二种则是通过官方推荐的HttpURLConnection进行实现。代码如下: 法一: public static void login(final S
  • xUtils3是安卓网络访问的重要库,基本上的网络请求所涉及的内容都有集成。笔者将实现xUtils3的简单使用,包括简单GET和POST请求、文件上传、文件下载、图片显示。 其主要特性有以下几点: ①提供异步网络请求 ②...
  • (1)ping 的原理 ping 程序是用来探测主机到主机之间是否可通信,如果不能ping到某台主机,表明不能和这台主机建立连接。...ICMP协议通过IP协议发送的,IP协议是一种无连接的,不可靠的数据包协议
  • 服务器下的客户端也可以通信,XMPP的前身是一个开源组织制定的网络通信协议——Jabber,XMPP的核心是在网络上分片段发送XML流的协议,这个协议是XMPP的即时通讯指令的传递手段。  为了防止服务器
  • 安卓网络编程TCP与UDP

    2018-05-08 09:41:30
    转载于:https://blog.csdn.net/a10615/article/details/52312009 ...一位大神作了一个很形象的比喻:TCP和UDP使用IP协议从一个网络传送数据包到另一个网络。把IP想像成一种高速公路,它允许其它协议在上面行驶并找...
  • 安卓9.0网络权限适配

    2020-12-22 10:44:56
    如果你的sdkversion是27以上且是http开头的网络协议是要加这个xml配置的 网络权限需要多加一个xml文件,在res中新建一个xml的包,然后在里面新建一个xml resources file 然后文件名写上network_security_config,内容为...
  • 之前说过安卓网络一般都是http协议的,其实觉得工作原理就是客户端向服务器发一条请求,服务器收到这个请求就返回相应的东西,然后客户端解析就好了,再把解析的数据处理下。安卓有很多网络框架,但是实质上还是...
  • MPTCP IETF工作组的官方网站上实现了安卓4.4.4对MPTCP协议的支持,但是,安卓4.4.4已经是非常古老的安卓版本,官网所推荐的Nexus5也是较为古老的机型,进行测试时会经常出现卡顿的情况,并且,Nexus5在中国仅支持...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 530
精华内容 212
关键字:

安卓网络协议