socket(掌握环信的前提,也是即时通讯的底层的兑现)

1.Socket简介

  • Socket 又曰”套接字”,,它跟网络有关,学网必学的一个学问
  • 纱上之有数只次通过一个双向的通信连接兑现数据的交换,这个连续的每一样端都号称一个socket
  • 应用程序通过”套接字”向网络发出请求或者诺网络要

通信连接的章程

2.网络通信的要素

  • 纱及的呼吁虽是由此Socket 来建连接然后互相通信
  • IP地址(网络高达主机设备的绝无仅有标识)
  • 捧号口(定位程序)
    <1>用于标示进程的逻辑地址,不同进程的意味
    <2>有效端口:0-65535,其中0-1024出于网使用要封存端口,开发中建议就所以1024以上端口
  • 传输协议 (用怎样的法门展开互)
    <1>通讯的规则
    <2>常见的商谈:TCP,UDP
    (1)TCP (传输控制协议)
    1.建连接,形成传输数据的大路
    2.于连接着展开充分数量传(数据未给限制)
    3.透过3次握手完成连接:目的是可靠协议,安全送达
    4.务必树立连接效率会稍为小
    (2)UDP (用户数据报协议)<不需要3赖连续>
    1.用数据及源和目的封装成数据包中,不欲建立连接
    2.每个数据报的大大小小限制以64k内
    3.因无论需连续,因此是不可靠协议
    4.无欲建立连接,速度快

    大面积的情商:TCP,UDP

3.Socket通信流程图

Socket通信流程图

  • HTTP 底层是由此socket建立连接通信管道,实现数量传
  • HTTP 是一个TCP的传协议(方式),它是一个可靠,安全的商

4.落实Socket服务端监听

  • 实现socket 的监听方法
    <1>使用C语言实现
    <2>使用CocoaAsyncSocket (OC) 第三正值框架,内部还是针对C的包
    Telnet命令 : telnet host port/telnet 192.168.10.10 5228
    Telnet命令是连连服务器上的某某端口对应之劳动
    <3>讲解一下Socket服务端对客户端请求的处理(以10086吗形式来效仿)

    • 下面是oc命令执行来写的
      1.在gitHub下载 CocoaAsyncSocket
      2.取出来里面的source->GCD

取出TCP协议

3.我们要建立一个Socket对象

Socket对象

4.巅峰输入来连接服务端,然后敲Enter
来输入有思念要发送给服务器的情,在JKServeLestening.m进行返回输入的始末,实现自问自答

   telnet 192.168.80.102 5228

5.重要的凡左右服务器端接受多少与归数据的拍卖

   在终端输入 telnet 192.168.80.102 5228 后有个选择,3是退出服务器连接

6.切实的代码都以JKServeLestening类里面自己下载

5.群聊服务器端

  • 大多只客户连接至服务器
  • 当一个客户端发送信息时,服务器转发让其他都连续的客户端
  • 一定给一个群聊的意

群聊服务端

  • 我们得以打开多个顶,来开展群聊操作
    以回到给用户信息时判断一下不怕哼了

这边产生个别个比主要的特性(端口号非常重要)

端口号:当一个无线电话发出差不多个QQ的时段,为了区别外的手机被他的有限只QQ发送时,用端口号来分别的究竟应发放谁QQ

/*
    //服务器IP地址
    @property (atomic, readonly, nullable) NSString *connectedHost;
    //端口号
    @property (atomic, readonly) uint16_t  connectedPort;
*/

劳务器端的现实的代码

    /*
       服务器这边读取数据
   */

  -(void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag
  {
     /*
           1.把 NSData 转化我 string
     */
      NSString *string = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
     //把当前客户端的数据转发给其他客户端
      NSLog(@"接收到客户端的数据 = %@",string);

     for (GCDAsyncSocket *socket in self.clientSocketS) {

          if (socket != sock) {
             [socket writeData:data withTimeout:-1 tag:0];
        }
    }
      /*
           2.处理请求,返回数据给客户端
      */
    #warning 每次读取完数据后,都要调用一次监听数据的方法

    [sock readDataWithTimeout:-1 tag:0]; //(客户端有请求就调用下面的方法)
  }

6.群聊客户端(和方面的服务器是保持一致的)

  • 客户端也用GCDAsyncSocket对象,挂代理GCDAsyncSocketDelegate
  • 个中跟服务器连接成用监听,读取了数据还索要监听
    (否则恐怕独自生平等不成数据)
    [sock readDataWithTimeout:-1 tag:0];

    //1.连接到聊天服务器

    //1.1创建一个客户端的socket对象

    GCDAsyncSocket *clientSocket = [[GCDAsyncSocket alloc]initWithDelegate:self delegateQueue:dispatch_get_global_queue(0, 0)];

    self.clientSocket = clientSocket;

    //1.2发送链接请求
    NSError *error = nil;

    [clientSocket connectToHost:@"192.168.80.102" onPort:5228 error:&error];

    /*
      读取数据
    */
    -(void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag
    {
       NSString *string = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];

       NSLog(@"%@",string);

        //读完数据也要监听

       [sock readDataWithTimeout:-1 tag:0];
    }
    /*
          与服务器连接成功
     */
    -(void)socket:(GCDAsyncSocket *)sock didConnectToHost:(NSString *)host port:(uint16_t)port
     {
         NSLog(@"与服务器连接成功");

         //监听读取数据(只有如此才会读取下面方法中的数据)

          [sock readDataWithTimeout:-1 tag:0];
     }
    /*
          与服务器断开连接
     */

      -(void)socketDidDisconnect:(GCDAsyncSocket *)sock withError:(NSError *)err
    {
        NSLog(@"断开连接= %@",err);
    }

7.上面5和6的汇总

  • 一个客户端与一个劳务器端,你待拿客户端里的IP改也投机电脑的IP地址,端口
    大于1024尽管吓,自己随便设,但是服务器端和客户端要保持一致

下是代码:在是就是拟 群聊
劳动器端群聊和客户端群聊代码

8.长连接和短连接

  • 累加连和短连接其实就是一个连连的保存状态,区别就是是接连保存之岁月

  • 教一下:Socket层及的合计(Http协议和XMPP协议还是定义数据传输格式)
    <1>Socket是层上的协商,指的是数传的格式
    <2>Http协议其实是她就是概念在网及传的数据格式,双方互相约束,也是数量传的格式

  • XMPP协议,是一款即时通讯协议
    <1>可扩大消息处理现场的商事,是冲可扩大标记语言(XML)的磋商,它用于即时消息(IM)以及在线探测,这个协议或最终同意因特网用户向因特网其他任何人发送即时消息

  • 实际的辨析一下下面的合计

  • 盖写一封信也业内:

** TCP/UDP (传输方式 ) ->EMS/申通/圆通**
HTTP/XMPP(数据传格式) ->>新的始末格式 (中文或,英文)

9.简述即时通讯

  • 即时通讯,又称实时报道
  • 即时通讯(Instant MessageIng,简称IM)
    是一个实时通信系统,允许两人或多人以网络实时的传递文字消息,文件,语音及视频交流
  • 即时通讯在开中采取的现象
    <1>开发一个近乎于微信,QQ,易信的闲谈软件
    <2>在电商APP集成买家及发售家的实时沟通等等
  • 脚下手上,实现即时通讯的方案
    <1> XMPP(开源之即时通讯)
    <2> 环信

XMPP

  • XMPP协议是一个即时通讯的商事,在网络及传的数目格式是XML,它是经过TCP/IP连接到服务器.

XMPP

综述:环信是在XMPP上之之二次开发