最近在看socket编程的一些内容,想总结下。先从理论知识总结下,不涉及代码。
1.socket是什么?
socket(套接字)是应用层和TCP/IP协议族通信的中间软件抽象层,是它的一组接口。包含进行网络通讯必须的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程的协议端口。
2.socket能干嘛?
多个TCP连接或者多个应用程序进程可能需要通过同一个TCP协议端口传输数据,为了区分不同的应用程序进程和连接,操作系统为应用程序和TPC/IP协议交互提供了socket。应用层和传输层可以通过socket,区分来自不同应用程序进程或者网络连接的通信,实现数据传输的并发服务(socket并发通信,比如手机直播软件中的聊天,全局跑道等等)。
3.如何建立socket连接
建立socket连接至少需要一对套接字,分别运行于服务端和客户端,clientSocket serverSocket。建立连接需要三个步骤:服务器监听,客户端请求,连接确认。
socket可以支持不同的传输层协议(tcp或者udp),当使用tcp协议进行连接时,该socket连接就是一个tcp连接。udp同理
4.socket心跳机制
因为防火墙会关闭长时间处于非活跃状态的连接而导致socket连接中断,通过心跳机制可以保持长连接。原理如下:
客户端每隔一段时间向服务器端发送一个心跳包,同时开启定时器。服务器返回一个相同的心跳包给客户端。如果客户端能收到心跳包,说明连接正常,删除定时器。如果超时未收到心跳包,则认为连接断开,这个时候可以进行重连设置。至于如何设置重连,可以参考:https://blog.csdn.net/u013282507/article/details/52622264
参考:http://www.cocoachina.com/ios/20160602/16572.html
https://blog.csdn.net/u013282507/article/details/52622264