什么是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. unity opaque sort

    https://docs.unity3d.com/ScriptReference/Rendering.OpaqueSortMode.html unity对opaque的排序 tbdr下不排序 其它由近 ...

  2. iOS开发-DatePicker控件

    时间控件不管是Android还是iOS中都是必然存在的一个控件,具体的效果大同小异,显示日期,时间,iOS中有四种方式可以选择,Time, Date,Date and Time  , Count Do ...

  3. TabLayout ViewPager Fragment 简介 案例 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  4. JavaScript操作XML (一)

    JavaScript操作XML是通过XML DOM来完成的.那么什么是XML DOM呢?XML DOM 是: 用于 XML 的标准对象模型 用于 XML 的标准编程接口 中立于平台和语言 W3C 的标 ...

  5. 你应该了解的CSS语义化命名方式及常用命名规则

    CSS语义化命名 从上图我们可以大概看出这里有两种CSS的命名方式:1.结构化命名法:2.语义化命名法. 结构化命名法:根据页面中板块的位置而命名,如上图中的content-left,这时如果我们想把 ...

  6. golang struct转map

    struct转map package main import ( "fmt" "reflect" "time" ) type User st ...

  7. 动态改变UIPopupList选项(NGUI)

    NGUI的UIPopupList 可以通过修改items属性来动态改变菜单选项: public class popListvahnge : MonoBehaviour { public UIPopup ...

  8. Java 正则表达式提取标签中的属性(src 连接地址)等

    public class Test { public static void main(String[] args) { String source = "<p><img ...

  9. 【CSS】瀑布流布局的两种方式:传统多列浮动和绝对定位布局

    传统多列浮动 各列固定宽度,并且左浮动: 一列中的数据块为一组,列中的每个数据块依次排列即可: 更多数据加载时,需要分别插入到不同的列上: 优点: (1)布局简单,应该说没啥特别的难点: (2)不用明 ...

  10. Field.setAccessible()方法

    http://blog.csdn.net/kjfcpua/article/details/8496911 java代码中,常常将一个类的成员变量置为private 在类的外面获取此类的私有成员变量的v ...