iOSXMPP 环信 融云ios

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

2016-09-09  本文已影响2079人  IIronMan

1.Socket简介

通信连接的方式

2.网络通信的要素

3.Socket通信流程图

Socket通信流程图

4.实现Socket服务端监听

取出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.群聊客户端(和上面的服务器是保持一致的)

    //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的汇总

下面是代码:在此只是模拟 群聊
服务器端群聊和客户端群聊代码

8.长连接和短连接

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

9.简述即时通讯

XMPP XMPP

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

上一篇下一篇

猜你喜欢

热点阅读