美文网首页
消息转发及群聊客户端

消息转发及群聊客户端

作者: 陈水寒 | 来源:发表于2017-04-08 13:59 被阅读19次

    在前文“10086服务端监听”基础上,修改代理方法,在接收到数据后转发给其他client

    /**
     *  每次客户端发送数据时调用该方法
     *
     *  @param sock 客户端socket
     *  @param data 发送的数据
     *  @param tag
     */
    - (void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag
    {
    //    NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        // 遍历客户端数组,接收到消息后转发给其他客户端
        for (GCDAsyncSocket *currentSocket in self.clientSockets) {
            if (currentSocket != sock) { // 不给自己转发消息
                [currentSocket writeData:data withTimeout:-1 tag:0];
            }
        }
        
        // 每次数据接收完成后,需要重新开启监听
        [sock readDataWithTimeout:-1 tag:0];
    }
    

    命令行显示效果如下:

    命令行演示效果.gif

    新建一个IOS工程,添加CocoaAsyncSocket第三方库

    • 初始化的时候连接到服务器上
        GCDAsyncSocket *clientSocket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_global_queue(0, 0)];
        self.clientSocket = clientSocket;
        
        NSError *error = nil;
        [clientSocket connectToHost:@"127.0.0.1" onPort:30000 error:&error];
        if (!error) {
            NSLog(@"error:%@",error);
        }
    
    • 在代理方法中将收到的消息存储起来,然后刷新显示
    - (void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag
    {
        NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"收到数据%@",str);
        // 将接收到的数据添加到数组中去
        [self.chatContent addObject:str];
        // 回到主线程刷新tablview
        dispatch_async(dispatch_get_main_queue(), ^{
            [self.tableView reloadData];
        });
        // 监听数据收发
        [self.clientSocket readDataWithTimeout:-1 tag:0];
    }
    

    ios客户端消息收发效果

    ios客户端消息收发效果.gif

    相关文章

      网友评论

          本文标题:消息转发及群聊客户端

          本文链接:https://www.haomeiwen.com/subject/jnulattx.html