Android | Socket & Https(Java&Android)原理及API使用架构概述

  • Socket两种通道模型:

    • TCP:可持续性地输送数据,注意使用
    • UDP:无连接,UDP是一个不可靠的协议,
      发送方所发送的数据报并不一定以相同的次序到达接收方。
  • 这里详见另外一篇博客Android网络 | Socket(Eclipse--Java)


  • HTTP与Socket通信的区别

    • HTTP是位于应用层的协议,
      Socket对应的是传输层(TCP/UDP)

    • HTTP已经基本可以满足大部分情况下与Server端的数据交互,为何还要写Socket通信?

      • HTTP是一个应用层的协议,
        我们针对这个协议已经定义了很多通信的规范,
        比如请求体、响应体、请求头等;

      • HTTP是一个无状态的协议,
        比如通过浏览器访问百度,
        访问之后百度会把网页数据传给浏览器,
        浏览器渲染完成,通信结束;
        无状态协议是指比如客户获得一张网页之后关闭浏览器,然后再一次启动浏览器,再登录该网站,但是服务器并不知道客户关闭了一次浏览器,
        无状态服务器是指一种把每个请求作为与之前任何请求都无关的独立的事务的服务器

      • 服务端推送场景:
        HTTP很难实现,
        由服务端发起、客户端接收的能力;

      • 移动端通信,传输数据时,
        移动端期望传输效率尽可能要高,
        消耗的流量尽可能要少;
        假设我们要发送几个字符,
        如果我们要通过HTTP协议去发送的话,
        就需要按照HTTP的规范,将要发送的数据进行封装,
        而在发送过程中,数据包就会变大非常多;

        而使用Socket的话,
        我们可以自己定义一些非常简单的协议——
        有可能我们发送一个内容的时候,
        数据体只要有一个目标目的地,再加上一个内容即可,
        也即数据的大小会小很多,灵活性会高些;

      • 小结:
        HTTP是应用层的协议,已经有明确、完善的需要遵循的规范;
        Socket位于底层,更加灵活,方便定制,
        能够提供Server端主动向客户端通信的能力;

  • UDP

  • UDP传输机制,类似于写信的方式——
    每次传输把要传输的数据一次性封装起来(写进一封信),
    传送给目标,
    目标打开数据封装(打开信封),阅读数据,
    完毕后考虑是否要回复(回信);

  • 不可靠通信,不知道对方是否能接收到;

  • 下面看图解:
    • ip:定位到机器;
      port:定位到机器上的某个服务程序;
      确认了,拿到ip和port,就相当于有了目标程序的接收地址,
      接下来就可以把要发送的数据进行封装(写好东西装信封),
      封装类DatagramPacket

    • 把数据封装成一个Packet之后,
      Client调用send,将数据包发送给Server,
      Server收到之后,
      通过DatagramPacket解析数据得到数据体,
      解析完了,可以选择回复(或者不回复),
      回复时同样用DatagramPacket封装数据而后发送;

    • 对于Java层或者Android上的API,
      UDP ClientUDP Server都是DatagramSocket类;
      IP和端口号相关的是类InetAddress
      数据发送操作相关类是DatagramPacket

    • 通信流程:
      Server处于Socket的receive状态,
      期待接收消息;
      Client把需要发送的消息封装成DatagramPacket,
      然后根据Server的ip和port(InetAddress)找到目标程序,
      把DatagramPacket就send过去;
      Server拿到Packet之后进行解析和阅读,
      阅读完毕后考虑给Client回复发送Packet;

  • TCP

  • 如果要打个比方的话,
    UDP类似于写信的方式的话,
    TCP则是类似于打电话的方式,
    一旦连接完成之后就可以进行不间断的通信,
    TCP是一个比较安全的协议,
    确保接收方一定能收到数据;

下面看图解:

  • TCP Client对应的API是Socket,
    TCP Server对应的是ServerSocket;

  • 同样的,Client端向Server发送数据前,
    首先要知道Server的ip和port,
    去定位到Server机上接收信息的程序,

  • Client和Server通信,
    一旦连接成功,会形成一个全双工通道,
    通信双方都会拿到对方的IO流,
    可以彼此任意发送数据(图片、字符串等),
    当然图片和字符串等数据在具体的通信过程中,
    都会在底层转换成二进制流;

    所以如Client向Server发送数据时,
    就拿着Server端的输出流(outputStream)去写数据,
    比如写入图片二进制、字符串等;

    反过来Server向Client发送数据时,
    则就拿着Client端的输出流(outputStream)去写数据,

    Client读取Server数据,
    实际上就是拿到Server的输入流(inputStream)去读(read),
    Server同理;

Https

  • 相关API
    • HttpsURLConnection
    • X509Certificate
    • KeyStore
    • SSLSocketFactory
    • ...

Https比Http多了一层证书机制,
证书相关的API如X509Certificate、KeyStore、SSLSocketFactory等;

  • 正确访问https页面的姿势
    • 很多时候开发人员的在访问https页面的时候,
      比如项目一开始全部使用http,忽然有一天要用到https的时候,
      经常为了自己的开发效率,或者就为了能访问到数据,
      大多数的时候会选择忽视证书的校验以及域名类的校验,
      即默认访问的https网页都是安全通过的,

      这样做确实能够正常交互并拿到数据,
      但这么做也就失去了https的意义,
      也就是你不在乎Server端给你发的证书是真是假;

    • 正确的做法,
      应该是要去验证证书,校验域名。





参考自,慕课网。就业班

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容

  • 网络编程 一.楔子 你现在已经学会了写python代码,假如你写了两个python文件a.py和b.py,分别去运...
    go以恒阅读 1,988评论 0 6
  • 大家好,我是徐爱卿。博客地址:flutterall.com 引言 Android网络编程一直都是我想记录的一篇文章...
    徐爱卿阅读 45,097评论 52 219
  • 最近在学习Python看了一篇文章写得不错,是在脚本之家里的,原文如下,很有帮助: 一、网络知识的一些介绍 soc...
    qtruip阅读 2,681评论 0 6
  • “太贵了,能不能便宜点?”在成交之前你一定会听到客户问你这样的问题。不可否认,“太贵了”已经变成每一个客户的口头禅...
    滞留一人阅读 548评论 0 0
  • 二十二世纪四十年代末,历时七年。 银河系迎来了一颗彗星。 时间:2147年5月12日 联合国FRT军事中心,各大国...
    龙健山阅读 206评论 0 0