iOS:即时通讯之<了解篇 SocKet>
什么是socket?
计算机专业术语就是:
网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。Socket的英文原义是“孔”或“插座”。作为BSD UNIX的进程通信机制,取后一种意思。通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。在Internet上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。Socket正如其英文原意那样,像一个多孔插座。一台主机犹如布满各种插座的房间,每个插座有一个编号,有的插座提供220伏交流电, 有的提供110伏交流电,有的则提供有线电视节目。 客户软件将插头插到不同编号的插座,就可以得到不同的服务
通俗语:
Socket称"套接字”
网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket端,平时我们向服务器发送一个网络请求,然后服务器响应请求,返回服务器数据应用程序通常通过"套接字"向网络发出请求或者应答网络请求
细节:
1.Socket相当于一个“管道”或者说“隧道”两边的连接,一个进入,一个出来
2.用户名和密码是存储在服务器的数据库中
3.我们要保证客户端程序是访问web应用程序还是数据库应用程序呢?就是通过端口号
网络通信要素:
1.网络上的请求就是通过Socket来建立连接然后互相通信
2.IP地址(网络上主机设备的唯一标识)(寻找服务器的主机)
3.端口号(定位程序)
4.用于标示进程(一个程序就是一个进程)的逻辑地址,不同进程的标示
5.有效端口:0~65535,其中0~1024由系统使用或者保留端口,开发中建议使用1024以上的端口
6.传输协议(用什么样的方式进行交互)(方式就是TCP和UDP需要还是不需要建立连接。就像快递一样,像顺丰或者是圆通就是一个方式)
7.通讯的规则 (常见协议:TCP、UDP)
TCP:
三次握手,是为了数据的安全性和可靠性 比如打电话:
第一次握手:先拨过去
第二次握手:对方“喂”了一声,响应一下,
第三次握手:我听到对方之后,也说了一句“喂” ,响应。
只有这三个步骤,别人喂了一声,你也喂了一声,它能听到我的响应,我还能听到它的响应才是成功的。假如借钱,这样才能保证了安全性和可靠性
1.必须建立连接,效率会稍低(每一次都要建立连接)
2.进行了多少次HTTP请求,就进行了多少次三次握手(HTTP是效率低低些,但是影响不大,因为用户下次发送网络请求的时间不固定,所以没有多大影响)(打电话如果一直保持,电话费不就多了吗)
3.HTTP就是每发送一次请求,就建立一次TCP连接,三次握手
UDP:
将数据及源和目的封装成数据包中,不需要建立连接(就像老师(源)屏幕广播,就及时的把数据同步发送到你的电脑上(目的),直接发送。假如网络断了,再次看到屏幕的时候,只能看到最新的内容。没了就没了,错过了就错过了)
每个数据报的大小限制在64Kb之内(首先是实时的,如果数据弄大点,如果出问题,就不会有太大的破坏)
因为无需连接,因此是不可靠协议(省去了三次握手,性能就高了)
不需要建立连接,速度快
应用:
Socket通信流程图:
1.bind()就是绑定端口 (服务器要有端口标识自己)
2.listen()就是监听端口看有没有lianjie过来,我同意就接受连接 (假如客户端要连接web应用程序端口,就要监听80端口。假如是恶意攻击,多次并发请求,会造成网络阻塞,那我就可以断开你的连接)
3.accept()
4.write()客户端发请求
5.read()服务端接受请求
假如客户端发送登录请求,我服务器是要做出来请求的,服务器要做回应数据,发数据给客户端,做一个write()写的操作一个HTTP的请求完了后,接下有个操作,结束连接。因为下次请求的时间是不固定的。就做一个close()操作
HTTP的底层就通过Socket建立连接通信管道,实现数据的传输
HTTP是一个TCP的传输协议(方式),它是一个可靠的安全的协议
实现Socket服务端监听方法:
1:实现socket的监听方法就是使用C语言实现(系统默认就有,但是麻烦)
2:使用CocoaAsyncSocket第三方框(是OC的),内部是对C的封装,耗时操作肯定是耗时的,开发的时候,我们也是用的这个框架
3:Telnet命令 telnet host port/telnet 192.168.10.10 5288 telnet命令是连接服务器上的某个端口对应的服务
Socket层上的协议:
1.Socket层上的协议指的数据传输的格式:
2:HTTP协议(类似于字典的协议)
3:XMPP协议(是一款即时通讯协议(目的是定义数据传输的格式)
4:自定义即时通讯协议,json格式
补充:TCP、UDP、HTTP、SOCKET之间的区别
IP:网络层协议;
TCP和UDP:传输层协议;
HTTP:应用层协议;
SOCKET:TCP/IP网络的API。
TCP/IP代表传输控制协议/网际协议,指的是一系列协议。
TCP和UDP使用IP协议从一个网络传送数据包到另一个网络。把IP想像成一种高速公路,它允许其它协议在上面行驶并找到到其它电脑的出口。TCP和UDP是高速公路上的“卡车”,它们携带的货物就是像HTTP,文件传输协议FTP这样的协议等。
TCP和UDP是FTP,HTTP和SMTP之类使用的传输层协议。虽然TCP和UDP都是用来传输其他协议的,它们却有一个显著的不同:TCP提供有保证的数据传输,而UDP不提供。这意味着TCP有一个特殊的机制来确保数据安全的不出错的从一个端点传到另一个端点,而UDP不提供任何这样的保证。
HTTP(超文本传输协议)是利用TCP在两台电脑(通常是Web服务器和客户端)之间传输信息的协议。客户端使用Web浏览器发起HTTP请求给Web服务器,Web服务器发送被请求的信息给客户端。
记住,需要IP协议来连接网络;TCP是一种允许我们安全传输数据的机制,,使用TCP协议来传输数据的HTTP是Web服务器和客户端使用的特殊协议。
Socket 接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,用以开发TCP/IP网络上的应用程序。
原文链接:http://www.jianshu.com/p/3167802eb1e5
iOS:即时通讯之<了解篇 SocKet>的更多相关文章
- iOS 即时通讯,从入门到 “放弃”?
原文链接:http://www.jianshu.com/p/2dbb360886a8 本文会用实例的方式,将 iOS 各种 IM 的方案都简单的实现一遍.并且提供一些选型.实现细节以及优化的建议. — ...
- iOS即时通讯之CocoaAsyncSocket源码解析三
原文 前言 本文实例Github地址:即时通讯的数据粘包.断包处理实例. 本文旨以实例的方式,使用CocoaAsyncSocket这个框架进行数据封包和拆包.来解决频繁的数据发送下,导致的数据粘包.以 ...
- iOS即时通讯之CocoaAsyncSocket源码解析五
接上篇:iOS即时通讯之CocoaAsyncSocket源码解析四 原文 前言: 本文为CocoaAsyncSocket Read篇终,将重点涉及该框架是如何利用缓冲区对数据进行读取. ...
- iOS即时通讯之CocoaAsyncSocket源码解析四
原文 前言: 本文为CocoaAsyncSocket源码系列中第二篇:Read篇,将重点涉及该框架是如何利用缓冲区对数据进行读取.以及各种情况下的数据包处理,其中还包括普通的.和基于TLS的不同读取操 ...
- iOS即时通讯之CocoaAsyncSocket源码解析二
原文 前言 本文承接上文:iOS即时通讯之CocoaAsyncSocket源码解析一 上文我们提到了GCDAsyncSocket的初始化,以及最终connect之前的准备工作,包括一些错误检查:本机地 ...
- iOS即时通讯之CocoaAsyncSocket源码解析一
申明:本文内容属于转载整理,原文连接 前言: CocoaAsyncSocket是谷歌的开发者,基于BSD-Socket写的一个IM框架,它给Mac和iOS提供了易于使用的.强大的异步套接字库,向上封装 ...
- iOS即时通讯输入框随字数自适应高度
代码地址如下:http://www.demodashi.com/demo/13210.html 前言 本人最近在研究socket与聊天界面的UI,在写聊天界面UI的时候是模仿微信的界面其中的文字输入框 ...
- iOS 即时通讯 + 仿微信聊天框架 + 源码
这些你造吗? 即时通讯(IM),在IOS这片江湖里面已经算是一个老者了,我这小旋风也是在很早以前巡山的时候,就知道有即时通讯这个妖怪,以前也多多少少接触过一些,在造APP的时候用过,哎呀,说着说着就感 ...
- IOS 即时通讯的框架 配置环境
一.了解XMPP 协议(标准)XMPP 即时通讯协议SGIP 短信网关协议 这手机发短信 移动支付和网页支付 0x23232[0,1] 0x23232 0x23232 0x23232 只有协议,必须会 ...
随机推荐
- Windows 7目录
1. 用wubi安装的Ubuntu在重装Windows 7系统后,如何恢复(转) 2. Windows 7系统垃圾清理自写程序
- 用SBT编译Spark的WordCount程序
问题导读: 1.什么是sbt? 2.sbt项目环境如何建立? 3.如何使用sbt编译打包scala? sbt介绍 sbt是一个代码编译工具,是scala界的mvn,可以编译scala,java等,需要 ...
- @JVM中的几种垃圾收集算法
标记-清除(Mark-Sweep) 算法分为"标记"和"清除"两个阶段:首先标记出所有需要回收的对象,在标记完成后统一回收掉所有被标记的对象(没有与GC Roo ...
- 我所遭遇过的游戏中间件---nvDXTLib
我所遭遇过的游戏中间件---nvDXTLib nvDXTLib是Nvidia提供的一套用于DXT纹理压缩SDK.接口十分简洁,就是提供了几个纹理压缩的函数,其中我使用最多的函数是: DXTLIB_AP ...
- Linux,Windows和UNIX的进程调度的分析
摘要 : 本文以Linux ,Unix ,Windows 操作系统为例,分析其进程调度策略,以期对进程调度过程有更深层次的认识 关键词 : 进程调度 优先级 时间片轮转 实时进程 分时技术 ...
- Android动画-补间(Tween)动画
Android动画的两种方式,其中帧动画上篇文章已经讲了,这次主要讲解的就是补间动画,补间动画就是动画业务场景中常用的旋转,平移,缩放,和渐变效果,帧动画是通过轮播动画实现动画效果,补间动画通过在两个 ...
- Remove Duplicates from Sorted List leetcode java
题目: Given a sorted linked list, delete all duplicates such that each element appear only once. For e ...
- 30条技巧提高Web程序执行效率
尽量避免使用DOM.当需要反复使用DOM时,先把对DOM的引用存到JavaScript本地变量里再使用.使用设置innerHTML的方法来替换document.createElement/append ...
- Android之TelephonyManager
在Android平台中,通过TelephonyManager可以访问与手机通讯相关的信息,比如设备信息.网络信息及SIM卡信息,同时还可以监听电话的相关状态.下面我们通过几个方面来说明Android平 ...
- linux中sort命令
功能说明:将文本文件内容加以排序,sort可针对文本文件的内容,以行为单位来排序. 参 数: -b 忽略每行前面开始出的空格字符. -c 检查文件是否已经按照顺序排序. -d 排序时,处理英文字母.数 ...