zoukankan      html  css  js  c++  java
  • 使用asyncsocket群聊

    #import "ViewController.h"
    #import "AsyncSocket.h"
    @interface ViewController ()<AsyncSocketDelegate,UITextFieldDelegate>
    {
        //负责显示接受到的数据
        UITextView *_textView;
        
        //负责输入数据
        UITextField *_textField;
        
        //建立发送端
        AsyncSocket * sendSocket;
        
        //建立服务端
        AsyncSocket *serverSocket;
    }

    //建立一个数组保存连接
    @property (nonatomic,strong) NSMutableArray *socketArray;

    @end

    @implementation ViewController

    - (void)viewDidLoad {
        [super viewDidLoad];
        /**
         *  建立一个群聊,学生向老师端发送消息,老师端则显示全部信息
         */
        self.socketArray = [NSMutableArray arrayWithCapacity:0];
        [self createSocket];
        
        //创建界面
        [self createView];
        
        //创建一个定时器,没隔10秒清除一次数据
        [NSTimer scheduledTimerWithTimeInterval:10 target:self selector:@selector(clearTextView) userInfo:nil repeats:YES];
    }

    - (void)clearTextView{
        _textView.text = nil;
    }

    - (void)createView{
        _textView = [[UITextView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 240)];
        _textView.backgroundColor = [UIColor blackColor];
        _textView.textColor = [UIColor whiteColor];
        [self.view addSubview:_textView];
        
        _textField = [[UITextField alloc]initWithFrame:CGRectMake(0, 240, self.view.frame.size.width, 44)];
        _textField.delegate = self;
        _textField.backgroundColor = [UIColor redColor];
        [self.view addSubview:_textField];
        
        
        
    }


    - (void)createSocket{
        sendSocket = [[AsyncSocket alloc]initWithDelegate:self];
        
        serverSocket = [[AsyncSocket alloc]initWithDelegate:self];
        
        //服务端绑定port,监听该port接受的数据
        /**
         *  port最大为65535。当中建议设置为5000以上,另外另一些特殊的port,比如8080为视频port。建议不要占用
         */
        [serverSocket acceptOnPort:5678 error:nil];
    }

    - (void)onSocket:(AsyncSocket *)sock didAcceptNewSocket:(AsyncSocket *)newSocket{
        //接受的一个新连接,这个新连接须要保存一下。然后持续保持连接
        [self.socketArray addObject:newSocket];
        
        //当中-1表示持续观察,假设设置为300,那么300秒以后就不再观察
        [newSocket readDataWithTimeout:-1 tag:100];
    }

    -(void)onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag{
        
        //接受到的数据
        
        NSString *message = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
        if (_textView) {
            //在原来的旧数据上面。追加新的 数据
            _textView.text = [NSString stringWithFormat:@"%@%@",_textView.text,message];
        }
        [sock readDataWithTimeout:-1 tag:100];
        
        
    }


    - (void)onSocket:(AsyncSocket *)sock didWriteDataWithTag:(long)tag{
        //发送成功
        
    }

    //发送数据
    -(BOOL)textFieldShouldReturn:(UITextField *)textField{
        if (textField.text.length > 0 ) {
            //发送数据
            if (![sendSocket isConnected]) {
                //确定是否连接。假设没有连接,则開始连接
                
                [sendSocket connectToHost:@"10.8.155.176" onPort:5678 error:nil];
            }
            //当连接完毕以后。发送数据
            //拼接数据是谁说,我希望获得当前设备的名称
    //        [[UIDevice currentDevice]systemName];该方法仅仅有在真机上才有效。在模拟器上无效
            NSString *message = [NSString stringWithFormat:@"%@说:%@",@"房骞",textField.text];
            
            [sendSocket writeData:[message dataUsingEncoding:NSUTF8StringEncoding] withTimeout:-1 tag:100];
        }
        return YES;
    }
    @end


  • 相关阅读:
    php 链接不上 mysql数据库,不是扩展的问题,也不是数据库的问题
    php中magic_quotes_gpc的作用
    QuickSkin简单学习控制结构
    Xdebug调试PHP程序 (NetBeans)
    记录bind方法。。。和ajax二级联动
    自己写的php分页代码,喜欢的就看看,很实用的
    想去掉启动时的win7选择怎么办
    QuickSkin简单学习属性和方法
    【CDQ分治】P3810 【模板】三维偏序(陌上花开)
    LibraryBar、LibraryContainer的宽高设置
  • 原文地址:https://www.cnblogs.com/zsychanpin/p/7264343.html
Copyright © 2011-2022 走看看