什么是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网络上的应用程序。

文/iOS开发到放弃(简书作者)
原文链接:http://www.jianshu.com/p/3167802eb1e5

iOS:即时通讯之<了解篇 SocKet>的更多相关文章

  1. iOS 即时通讯,从入门到 “放弃”?

    原文链接:http://www.jianshu.com/p/2dbb360886a8 本文会用实例的方式,将 iOS 各种 IM 的方案都简单的实现一遍.并且提供一些选型.实现细节以及优化的建议. — ...

  2. iOS即时通讯之CocoaAsyncSocket源码解析三

    原文 前言 本文实例Github地址:即时通讯的数据粘包.断包处理实例. 本文旨以实例的方式,使用CocoaAsyncSocket这个框架进行数据封包和拆包.来解决频繁的数据发送下,导致的数据粘包.以 ...

  3. iOS即时通讯之CocoaAsyncSocket源码解析五

    接上篇:iOS即时通讯之CocoaAsyncSocket源码解析四         原文 前言: 本文为CocoaAsyncSocket Read篇终,将重点涉及该框架是如何利用缓冲区对数据进行读取. ...

  4. iOS即时通讯之CocoaAsyncSocket源码解析四

    原文 前言: 本文为CocoaAsyncSocket源码系列中第二篇:Read篇,将重点涉及该框架是如何利用缓冲区对数据进行读取.以及各种情况下的数据包处理,其中还包括普通的.和基于TLS的不同读取操 ...

  5. iOS即时通讯之CocoaAsyncSocket源码解析二

    原文 前言 本文承接上文:iOS即时通讯之CocoaAsyncSocket源码解析一 上文我们提到了GCDAsyncSocket的初始化,以及最终connect之前的准备工作,包括一些错误检查:本机地 ...

  6. iOS即时通讯之CocoaAsyncSocket源码解析一

    申明:本文内容属于转载整理,原文连接 前言: CocoaAsyncSocket是谷歌的开发者,基于BSD-Socket写的一个IM框架,它给Mac和iOS提供了易于使用的.强大的异步套接字库,向上封装 ...

  7. iOS即时通讯输入框随字数自适应高度

    代码地址如下:http://www.demodashi.com/demo/13210.html 前言 本人最近在研究socket与聊天界面的UI,在写聊天界面UI的时候是模仿微信的界面其中的文字输入框 ...

  8. iOS 即时通讯 + 仿微信聊天框架 + 源码

    这些你造吗? 即时通讯(IM),在IOS这片江湖里面已经算是一个老者了,我这小旋风也是在很早以前巡山的时候,就知道有即时通讯这个妖怪,以前也多多少少接触过一些,在造APP的时候用过,哎呀,说着说着就感 ...

  9. IOS 即时通讯的框架 配置环境

    一.了解XMPP 协议(标准)XMPP 即时通讯协议SGIP 短信网关协议 这手机发短信 移动支付和网页支付 0x23232[0,1] 0x23232 0x23232 0x23232 只有协议,必须会 ...

随机推荐

  1. 初识Tomcat

    Tomcat的安装非常简单,解压即可! Tomcat要正常运行,需要配置一个环境变量JAVA_HOME,指向jdk的主目录.

  2. Cesium中Homebutton改变默认跳转位置 【转】

    在Cesium中,Homebutton的默认跳转位置是美国,那么在开发中我们如何更改这个默认跳转位置呢,这就要更改一下源代码了: Camera.DEFAULT_VIEW_RECTANGLE = Rec ...

  3. IDEA是如何导入项目的,及启动导入项目遇到的问题:无法加载主类的一连串问题

    1.启动报错误: 找不到或无法加载主类 org.spring.springboot.Application 可能在工程下面有多个module,然后,module里面的iml配置文件不止一个,删除留主的 ...

  4. Android之AlarmManager

    Android平台中,Alarm Manager Service控制着闹钟和唤醒功能.和其他系统服务一样,提供了一个辅助管理类-AlarmManager,我们只需要使用AlarmManager即可调用 ...

  5. Android下 使用百度地图sdk

    百度地图 Android SDK是一套基于Android 2.1(v1.3.5及以前版本支持android 1.5以上系统)及以上版本设备的应用程序接口.可以使用该套 SDK开发适用于Android系 ...

  6. Android -- 打开本地图片且显示路径

    背景                                                                                          代码       ...

  7. [Functional Programming] mapReduce over Async operations and fanout results in Pair(rejected, resolved) (fanout, flip, mapReduce)

    This post is similar to previous post. The difference is in this post, we are going to see how to ha ...

  8. 在Foreda8上试安装Apchehttpd-2.4.6.tar.gz

    下文是我边试边做的记录,不保证内容的完整性和正确性. 由于我的Apsire机器是最简安装Foreda8,所以需要安装httpd,熟悉一遍也是很好的嘛. 我从网上搜罗并下载了apchehttpd-2.4 ...

  9. redis队列及多线程应用

    由于xxx平台上自己的博客已经很久没更新了,一直以来都是用的印象笔记来做工作中知识的积累存根,不知不觉印象笔记里已经有了四.五百遍文章.为了从新开始能与广大攻城狮共同提高技术能力与水平,随决心另起炉灶 ...

  10. jasperreport 通过javabean datasoource实现chart的报表

    继上次report的demo后,还在继续做着report方面的research,今天主要是实现了通过javabean datasource填充chart图表,通过webservice下载pdf格式的报 ...