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 只有协议,必须会 ...
随机推荐
- OTL翻译(4) -- otl_stream类
otl_stream Otl_stream是具体实现otl_stream_concept的类.任何的SQL语句.SQL语句块和存储过程都能通过otl_stream进行处理. 传统的数据库API处理SQ ...
- Tengine zabbix 监控
Tengine 配置 在http 段下新增以下配置 req_status_zone server_stat "$host" 3M; server { listen 9008; lo ...
- go语言之进阶篇非结构体匿名字段
1.非结构体匿名字段 示例 : package main import "fmt" type mystr string //自定义类型,给一个类型改名 type Person st ...
- 县级以上联动js实现无需数据库的行政区域下拉控件
代码共享url: http://code.google.com/p/region-select-js/ 数据已经更新到中国统计局网站中的2012年的那批数据(制作后未核对); 下拉使用div模拟实现. ...
- 默认网关和默认路由 —— Cisco CCNA – Default Gateway & Default Routes
原文:https://www.certificationkits.com/cisco-certification/ccna-articles/cisco-ccna-intro-to-routing-b ...
- 关于LayoutInflater的错误用法
转自:http://www.doubleencore.com/2013/05/layout-inflation-as-intended/ Layout inflation is the term us ...
- 栅格计算器函数之Con
Con函数是condition(条件)的缩写,其作用 语法是: Con(条件,条件为真执行语句,条件为假执行语句[可选]) 或Con(输入栅格,条件为真执行语句,条件为假执行语句[可选],逻辑表达式) ...
- winform暴走表情制作器
c# winform暴走表情制作器,项目工程下载地址:项目下载地址 程序运行截图: 部分代码:获取鼠标所在的图片中坐标 private void pictureBox1_MouseDown(objec ...
- 关于支付宝即时到帐异步通知(notify_url)一点总结
(1)首先做支付的商业网站,需要能够上网(支付成功后,需要进行参数回传验证,如果上不了网,responseText就直接为false)(2)notify_url这个不能进行验证,比如继承父类Page, ...
- 从零开始学JavaScript二(基本概念)
基本概念 一.区分大小写 在ECMAScript中的一切(变量.函数名.操作符)都是区分大小写的. 如变量名test和Test分别表示两个不同的变量, 二.标识符 所谓标识符,就是指变量.函数.属性的 ...