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

简介: Android | Socket & Https(Java&Android)原理及API使用架构概述
  • Socket两种通道模型:

    • TCP:可持续性地输送数据,注意使用
    • UDP:无连接,UDP是一个不可靠的协议,

发送方所发送的数据报并不一定以相同的次序到达接收方。


  • 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端给你发的证书是真是假;

- 正确的做法,

应该是要去验证证书,校验域名。





参考自,慕课网。就业班

相关文章
|
17天前
|
存储 SQL 关系型数据库
MySQL进阶突击系列(03) MySQL架构原理solo九魂17环连问 | 给大厂面试官的一封信
本文介绍了MySQL架构原理、存储引擎和索引的相关知识点,涵盖查询和更新SQL的执行过程、MySQL各组件的作用、存储引擎的类型及特性、索引的建立和使用原则,以及二叉树、平衡二叉树和B树的区别。通过这些内容,帮助读者深入了解MySQL的工作机制,提高数据库管理和优化能力。
|
1月前
|
人工智能 前端开发 编译器
【AI系统】LLVM 架构设计和原理
本文介绍了LLVM的诞生背景及其与GCC的区别,重点阐述了LLVM的架构特点,包括其组件独立性、中间表示(IR)的优势及整体架构。通过Clang+LLVM的实际编译案例,展示了从C代码到可执行文件的全过程,突显了LLVM在编译器领域的创新与优势。
51 3
|
2月前
|
运维 持续交付 云计算
深入解析云计算中的微服务架构:原理、优势与实践
深入解析云计算中的微服务架构:原理、优势与实践
70 1
|
2月前
|
安全 Android开发 iOS开发
深入探索Android与iOS的差异:从系统架构到用户体验
在当今的智能手机市场中,Android和iOS无疑是最受欢迎的两大操作系统。本文旨在探讨这两个平台之间的主要差异,包括它们的系统架构、开发环境、安全性、以及用户体验等方面。通过对比分析,我们可以更好地理解为何不同的用户群体可能会偏好其中一个平台,以及这些偏好背后的技术原因。
|
1月前
|
存储 Linux API
深入探索Android系统架构:从内核到应用层的全面解析
本文旨在为读者提供一份详尽的Android系统架构分析,从底层的Linux内核到顶层的应用程序框架。我们将探讨Android系统的模块化设计、各层之间的交互机制以及它们如何共同协作以支持丰富多样的应用生态。通过本篇文章,开发者和爱好者可以更深入理解Android平台的工作原理,从而优化开发流程和提升应用性能。
|
30天前
|
SQL 存储 关系型数据库
MySQL进阶突击系列(01)一条简单SQL搞懂MySQL架构原理 | 含实用命令参数集
本文从MySQL的架构原理出发,详细介绍其SQL查询的全过程,涵盖客户端发起SQL查询、服务端SQL接口、解析器、优化器、存储引擎及日志数据等内容。同时提供了MySQL常用的管理命令参数集,帮助读者深入了解MySQL的技术细节和优化方法。
|
1月前
|
安全 Android开发 iOS开发
深入探索iOS与Android系统架构差异及其对开发者的影响
本文旨在通过对比分析iOS和Android两大移动操作系统的系统架构,探讨它们在设计理念、技术实现及开发者生态方面的差异。不同于常规摘要仅概述内容要点,本摘要将简要触及核心议题,为读者提供对两大平台架构特点的宏观理解,铺垫
|
1月前
|
网络协议 Linux Android开发
深入探索Android系统架构与性能优化
本文旨在为读者提供一个全面的视角,以理解Android系统的架构及其关键组件。我们将探讨Android的发展历程、核心特性以及如何通过有效的策略来提升应用的性能和用户体验。本文不包含常规的技术细节,而是聚焦于系统架构层面的深入分析,以及针对开发者的实际优化建议。
53 1
|
2月前
|
IDE 安全 Android开发
深入探索Android与iOS操作系统的架构差异
本文旨在对比分析Android和iOS两大主流移动操作系统在架构设计上的根本差异。通过详细解读两者的系统架构、开发环境、以及安全性等方面,揭示它们各自的特点及优势,为开发者选择合适的平台提供参考。
|
27天前
|
开发工具 Android开发 iOS开发
Android与iOS生态差异深度剖析:技术架构、开发体验与市场影响####
本文旨在深入探讨Android与iOS两大移动操作系统在技术架构、开发环境及市场表现上的核心差异,为开发者和技术爱好者提供全面的视角。通过对比分析,揭示两者如何塑造了当今多样化的移动应用生态,并对未来发展趋势进行了展望。 ####