zoukankan      html  css  js  c++  java
  • Socket即时通讯小实例

    分层原则

    1.物理层:主要定义物理设备标准,如网线的接口类型、各种传输介质的传输速率等。主要作用是传输比特流(就是由1、0转化为电流强弱来进行传输,到达目的地后再转化为1、0,也就是常说的数模与模数转换)。这一层的数据叫做比特(bit),主要设备:集线器
    2.数据链路层:主要将从物理层接收的数据进行MAC地址的封装与解封装。常把这一层的数据叫做帧,主要设备:交换机
    3.网络层:选择合适的网间路由和交换结点, 确保数据及时传送,将从下层接收到的数据进行IP地址的封装与解封装。常把这一层数据叫做数据包,主要设备:路由器。
    4.传输层:定义了一些传输数据的协议和端口,如TCP、UDP协议,主要将从下层接收的数据进行分段和传输,到达目的地址后再进行重组,以往把这一层数据叫做段。
    5.会话层:通过传输层建立数据传输通路。在系统之间发起会话或者接受会话请求(设备之间需要互相认识)
    6.表示层:主要是进行对接收的数据进行解释、压缩与解压缩等,即把计算机能够识别的东西转化成人能够识别的东西(如图片、声音等)
    7.应用层:主要是一些终端的应用,比如说FTP(各种文件下载)、浏览器、QQ等,可以将其理解为在电脑屏幕上可以看到的东西,也就是终端应用。
     
    •UDP(用户数据报协议)
    –将数据及源和目的封装成数据包中,不需要建立连接
    –每个数据报的大小限制在64K之内
    –因为无需连接,因此是不可靠协议
    不需要建立连接,速度快
    •TCP(传输控制协议)
    –建立连接,形成传输数据的通道
    –在连接中进行大数据传输(数据大小不收限制
    –通过三次握手完成连接,是可靠协议,安全送达
    –必须建立连接,效率会稍低
     
    •Socket就是为网络服务提供的一种机制
    –在Unix中,网络既是Socket,并不局限在TCP/UDP
    –  Socket可以用于自定义协议,例如:QQ
    •通信的两端都是Socket
    •网络通信其实就是Socket间的通信
    •数据在两个Socket间通过IO传输
    Socket通讯流程图
     
     
    •在Web服务(WebServices=>XML)大行其道的今天,调用Web服务的代价是高昂的,尤其是仅仅是抓取少量数据的时候尤其如此。而使用Socket,可以只传送数据本身而不用进行XML封装,大大降低数据传输的开销(JSON)
    •Socket允许使用长连接,允许应用程序运行在异步模式(提高效率),只有在需要的时候才接收数据
    Ø流式Socket(SOCK_STREAM):流式是一种面向连接的Socket,针对于面向连接的TCP服务应用
    Ø数据报式Socket(SOCK_DGRAM):数据报式Socket是一种无连接的Socket,对应于无连接的UDP服务应用
     
    •在iOS中以NSStream(流)来发送和接收数据
    •可以设置流的代理,对流状态的变化做出相应
    –连接建立
    –接收到数据
    –连接关闭
    1.NSStream:数据流的父类,用于定义抽象特性,例如:打开、关闭代理,NSStream继承自CFStream(Core Foundation)
    2.NSInputStream:NSStream的子类,用于读取输入
    3.NSOutputStream:NSSTream的子类,用于写输出
     
    开发步骤:
    1.网络连接设置
    1.设置网络连接,绑定到主机和端口
    2.设置输入流和输出流的代理,监听数据流的状态
    3.将输入输出流添加至运行循环
    4.打开输入流和输出流
    2.发送消息给服务器
    3.有可读取字节时,读取服务器返回的内容
    到达流末尾时,关闭流,同时并从主运行循环中删除

    /**

     NSStreamEventNone = 0,                         // 无事件

     NSStreamEventOpenCompleted = 1UL << 0,         // 建立连接完成

     NSStreamEventHasBytesAvailable = 1UL << 1,     // 有可读的字节,接收到了数据,可以读了

     NSStreamEventHasSpaceAvailable = 1UL << 2,     // 可以使用输出流的空间,此时可以发送数据给服务器

     NSStreamEventErrorOccurred = 1UL << 3,         // 发生错误

     NSStreamEventEndEncountered = 1UL << 4         // 流结束事件,在此事件中负责做销毁工作

     */

  • 相关阅读:
    四叶草社交平台——十天冲刺(7)
    四叶草社交平台——十天冲刺(6)
    多表查询
    单表 查询
    django模板的导入
    2019-3-1
    DJANGO 28
    路由
    Django项目的创建与介绍
    数据传输方式
  • 原文地址:https://www.cnblogs.com/BinShao/p/3574280.html
Copyright © 2011-2022 走看看