本章内容:
插座我知道
Sokcet的通信连接过程
套接字数据传输过程
我所认识的Socket
Socket是应用层与TCP/IP协议族通信的中间软件抽象层(百度百科解释:网络上的两个程序通过双向通信连接交换数据,这种连接的一端称为Socket)。1)网络通信支持TCP/IP协议的操作单元是TCP/IP协议的封装,它本身不是协议,而是调用接口(API)。
2)Socket位于应用层和传输层之间。您可以指定传输层使用的协议,如传输控制协议或用户数据报协议
3)一旦3)Socket连接,双方可以互相发送数据(推送),直到连接断开。
4)因为网络通信要经过很多中间节点,比如路由器、网关、防火墙等。尽管Socket是一个长时间的连接,但大多数防火墙默认情况下会关闭长时间不活动的连接,从而导致Socket连接中断。
5)定期发送数据包(也称为心跳包),避免因长时间不活动而关闭Socket连接。
6)使用三元组(ip地址、协议、端口号)可以识别网络的进程。
7)如果一个程序创建了一个Socket,让它监听端口80(创建时会给它分配一个端口),它实际上是向TCP/IP协议栈声明自己占用了端口80,然后所有针对端口80的TCP数据包都会被转发给应用程序。
结构图
00-1010 1)服务器先初始化Socket,然后绑定到端口,监听端口,调用accept方法进行阻塞,等待客户端的连接。
2)客户端初始化套接字,然后连接到服务(连接)。如果连接成功(三次握手成功),则客户端与服务器建立连接。
3)客户端发送数据请求,服务器接收并处理请求,然后向客户端响应数据,客户端读取数据,最后关闭连接,第一次交互结束。
通信连接过程
00-1010 1)当连接成功时,客户端和服务器都将有一个scooter实例,每个实例都有一个InputStream和一个OutputStream,数据就是通过这两个对象类进行交换的。
2)网络输入输出操作通过字节流传输。创建Socket对象时,操作系统会分别为InputStream和OutputStream分配一定大小的缓冲区,通过缓冲区完成数据的写入和写入。
3)写入器将数据写入对应于输出流的发送队列。当队列已满时,数据将被发送到另一端输入流的RecvQ队列。
4)如果此时RecvQ队列已满,OutputStream的写方法将阻塞,直到RecvQ队列有足够的空间容纳SendQ发送的数据。
5)需要注意的是,缓冲区的大小、写入端的速度和读取速度对这个连接的数据传输效率影响很大,可能会导致传输拥塞。
安卓文章推荐
你可能误解了安卓系统中权限管理的这两个概念。
http://mp.weixin.qq.com/s/QK4O7EoZ3zMoBNi1VXUqKg