#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

使用asyncsocket群聊的更多相关文章

  1. SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=》提升)

     SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=>提升,5个Demo贯彻全篇,感兴趣的玩才是真的学) 官方demo:http://www.asp.net/si ...

  2. smack 4.1创建群聊

    smack 4.1.1版本对群聊修改了很多,MultUserChat的构造函数修改成了私有,以前通过new MultUserChat创建聊天室,现在通过MultUserChatMananger先通过r ...

  3. Socket通信 简单实现私聊、群聊(dos命令下)

    很久以前的一个Demo,这里服务器只做转发功能,根据ID地址和端口号来标识身份,群聊和私聊只是简单实现, 服务器代码如下: import java.util.*; import java.io.*; ...

  4. Strophe.js连接XMPP服务器Openfire、Tigase实现Web私聊、群聊(MUC)

    XMPP(Extensible Messaging and Presence Protocol)是一种网络即时通讯协议,它基于XML,具有很强的扩展性,被广泛使用在即时通讯软件.网络游戏聊天.Web聊 ...

  5. 一例完整的websocket实现群聊demo

    前言 业余我都会花一些时间在tcp.http和websocket等领域的学习,现在觉得有点收获,所以把一个基于websocket的群聊功能的例子提供给大家玩玩.当然这是一个很完整的例子,包括webso ...

  6. ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(三) 之 实现单聊,群聊,发送图片,文件。

    上篇讲解了如何搭建聊天服务器,以及客户端js怎么和layui的语法配合.服务器已经连接上了,那么聊天还会远吗? 进入正题,正如上一篇提到的我们用 Client.Group(groupId)的方法向客户 ...

  7. 阿里百川IMSDK--自定义群聊界面

    // 获取群对象 YWTribe *tribe = [self.tribesArray objectAtIndex:indexPath.row]; // 发起群聊 UIViewController * ...

  8. Java-->实现群聊功能(C/S模式--TCP协议)

    --> Java 对TCP协议的支持: --> java.net包中定义了两个类ServerSocket 和Socket ,分别用来实现双向连接的server 端和client 端. -- ...

  9. 【从0開始Tornado建站】群聊

    群聊的前台主要代码: {%block content%} <!--<p class='text-success h3'>測试版本号,每天凌晨4:00清水,enjoy it~~:-)& ...

随机推荐

  1. Python爬虫入门:URLError异常处理

    大家好,本节在这里主要说的是URLError还有HTTPError,以及对它们的一些处理. 1.URLError 首先解释下URLError可能产生的原因: 网络无连接,即本机无法上网 连接不到特定的 ...

  2. Python爬虫小实践:爬取任意CSDN博客所有文章的文字内容(或可改写为保存其他的元素),间接增加博客访问量

    Python并不是我的主业,当初学Python主要是为了学爬虫,以为自己觉得能够从网上爬东西是一件非常神奇又是一件非常有用的事情,因为我们可以获取一些方面的数据或者其他的东西,反正各有用处. 这两天闲 ...

  3. 【Win 10 应用开发】UI Composition 札记(四):绘制图形

    使用 Win 2D 组件,就可以很轻松地绘制各种图形,哪怕你没有 D2D 相关基础,也不必写很复杂的 C++ 代码. 先来说说如何获取 Win 2D 组件.很简单,创建 UWP 应用项目后,你打开“解 ...

  4. 免费好用的阿里云云盾证书服务(https证书)申请步骤

    推荐一个免费的阿里云产品:云盾证书(https证书) 为了能让非专业人士看懂,同样尽量用直白的话,一般来说:当你个人需要建立网站,或者公司要建立官网.商城,通常需要先购买服务器或云主机,虚拟空间,然后 ...

  5. C#里调用 MysqlDB

    最近在做项目,发现在使用Mysql提供给C#操作的类不是和好用,就想办法写了一个操作方便的Mysql数据层类. 比如以前在执 行一个查询 代码                              ...

  6. Java中swap()实现

    Java中swap()实现 1.今天可爱的谭老师发了一道题目,使用java写方法交换Integer类型数据,而且入参固定了,题目请下图: 入参固定的话,当时想到的是重新定义一个自己的Integer类型 ...

  7. 比特币区块结构Merkle树及简单支付验证分析

    在比特币网络中,不是每个节点都有能力储存完整的区块链数据,受限于存储空间的的限制,很多节点是以SPV(Simplified Payment Verification简单支付验证)钱包接入比特币网络,通 ...

  8. oracle一些基本命令

    Oracle安装配置 设置四个账户及对应的密码 No. 用户名 口令 1 sys change_on_install 2 system manager 3 scott tiget 4 sh sh 上面 ...

  9. Celery 源码解析八:State 和 Result

    在前面几篇解析中,我们已经看过了 Worker 是如何运行的,Task 是如何创建的,以及怎么被路由到 Worker 中,除了这些之外,我们还对流量限制,Worker 控制和 Task/Worker ...

  10. Linux系列教程(二十四)——Linux的系统管理

    上篇博客介绍了Linux的服务管理,不管是以RPM包安装的服务,还是通过源码包安装的服务,万能启动服务的方法都可以通过 /绝对路径/启动脚本名 start .而通过 RPM 包安装的服务还可以通过 s ...