Android的Socket编程
序言
最近这两天面试因为之前项目的聊天是基于socket写的,所以面试的时候经常会被问到相关的问题,今天整理一下相关的知识。
Socket简介(什么是Socket)
定义:网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket
本地的进程间通信的方式有好多种,但网络中进程之间是如何通信的呢,首先要解决如何标示一个进程,在本地有进程的pid来标示一个进程,在网络上,通过tcp/ip协议族可以解决这个问题。
- 网络层的ip地址可以标示网络中的主机
- 传输层的协议+端口 可以唯一标示主机中的应用程序(进程)
这样 利用 ip+协议+端口就可以标示网络中的进程了。
socket链接和http链接的区别
估计有人还分不清socket和http的区别 ,正好有这机会普及一下:
Http协议:简单对象访问协议,对应于应用层,http是基于tcp链接的
tcp协议:对应传输层
ip协议:对应网络层
TCP/IP对传输层协议,主要解决数据如何在网络中传输,而Http是应用层协议,主要解决如何包装数据详见:《TCP/IP详解 卷一》
Sokcet是对tcp/ip协议的封装,Sokcet本身并不是协议,而是一个调用接口(api),通过Socket才能使用TCP/IP协议
http链接:短连接,即客户端向服务器发送一次请求,响应之后就会断掉;
sokcet链接 :长连接,理论上建立之后不会主动断掉,实际情况受环境因素影响 比如:服务器宕机,网络故障,长时间没有数据,防火墙等。
总的来说 Socket本身并不是协议,而是一个调用接口(API) ,Socket跟TCP/IP协议没有必然的联系 ,Socket编程接口在设计的时候,就希望也能适应其他的网络协议,从而形成了我们知道的一些最基本的函数接口,比如create、listen、connect、accept、send、read和write等等。
有张图可以表示的比较明确
Socket的通讯过程
Server端Listen(监听)某个端口是否有连接请求,Client端向Server 端发出Connect(连接)请求,Server端向Client端发回Accept(接受)消息。一个连接就建立起来了。Server端和Client 端都可以通过Send,Write等方法与对方通信。
对于一个功能齐全的Socket,都要包含以下基本结构,其工作过程包含以下四个基本的步骤&