使用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];

//服务端绑定端口,监听该端口接受的数据

/**

*  端口最大为65535,其中建议设置为5000以上,另外还有一些特殊的端口,例如8080为视频端口,建议不要占用

*/

[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

时间: 2024-08-06 06:46:41

使用asyncsocket群聊的相关文章

Java套接字编程实现群聊与私聊[原理版]

简介 运用Java套接字我们几乎可以完成一个网络聊天软件的小产品,本文不涉及UI部分,仅对原理部分用代码演示一下.一个可以多人聊天的小功能,在Linux系统上用telnet亲测可用. 服务器代码 package demo0811.demo3; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; import java.util.

基于itchat的微信群聊小助手基础开发(一)

前段时间由于要管理微信群,基于itchat开发了一个简单的微信机器人 主要功能有: 图灵机器人功能 群聊昵称格式修改提示 消息防撤回功能 斗图功能 要开发一个基于itchat的最基本的聊天机器人,在github上作者已经给出基本的操作,本博文只对附加的功能进行说明总结. 确保已经了解itchat的基本操作,先对功能1和功能2进行说明: 1.图灵机器人功能 该功能也是最基础的功能之一,itchat的基础案例也有相关例子. 图灵机器人简单而言就是以一定的规则给图灵的服务器发送数据包,图灵的服务器会以

实现了私聊和群聊功能的聊天工具

在前面的博客(简单的C/S聊天室)中,我们已经提到了,采用的是多线程的方法.服务器端主线程负责不断的侦听端口,子线程负责接收和发送消息.客户端主线程需要接收键盘消息,将其发送到服务器端,子线程需要接收服务器端发过来的消息.在这个简易的C/S聊天室的实现中,仅仅实现了群聊的功能,没有实现私聊.那么,本文就讲实现私聊和群聊. 首先我们想到的是,消息发过来,我怎么知道是公聊消息还是私聊消息呢.所以,这里需要对消息进行处理,比如说在消息前后都加上一些特殊的字符,我们称为协议字符.为此,我们可以定义一个接

如何解决群聊(MUC)聊天室重复存储、接收自己发送的消息的问题

CHENYILONG Blog 如何#解决方案#群聊(MUC)聊天室重复存储.接收自己发送的消息 编号 项目 描述 1 问题描述 单聊没问题,群聊会出现自动回复的问题 数据库中存储的数据出现的问题 界面上出现的问题:类似自动回复.回音壁一样一模一样地回答.  2 问题产生的原因 3 群聊基本的原理示意图 聊天内容的显示是经由从数据库进行的读取排序, 4 #解决方案# 拦截阻挡红色区域的执行  5 失败的尝试:尝试但是没有效果的方法 // AppDelegate.m中#pragma 接收消息代理监

Lync Server 2010部署群聊服务器

最近有网友问到Lync Server 2010部署群聊服务器,在此把部署文档发出来供参考. 下载链接:http://down.51cto.com/data/2256828

Java--&gt;实现群聊功能(C/S模式--TCP协议)

--> Java 对TCP协议的支持: --> java.net包中定义了两个类ServerSocket 和Socket ,分别用来实现双向连接的server 端和client 端. --> Client 类定义客户端 package com.dragon.java.tcpchat; import java.io.IOException; import java.net.Socket; import java.net.UnknownHostException; /** * 客户端 * *

python-使用正则快速解析QQ群聊记录

使用正则表达式,对QQ群聊天记录进行解析,用于分析日期.成员等维度发言情况. 原始文本是2014-03-28 15:04:25 №┽◎Eagle(369029696) 解析之后yyyy=2014mm = 03dd = 28hh = 15mi  =04ss = 25nick = №┽◎Eagleqq = 369029696 代码如下 # -*- coding: utf-8 -*- """ zhangbo2012 http://www.cnblogs.com/zhangbo201

ASP.NET SignalR 与LayIM配合,轻松实现网站客服聊天室(四) 添加表情、群聊功能

休息了两天,还是决定把这个尾巴给收了.本篇是最后一篇,也算是草草收尾吧.今天要加上表情功能和群聊.基本上就差不多了,其他功能,读者可以自行扩展或者优化.至于我写的代码方面,自己也没去重构.好的,我们开始在原有的基础上添加功能. 1.表情功能 表情我用了一个jquery插件,qqFace.由于GitHub中源码已经包含,我这里不在粘贴地址.先看一下添加表情后的效果吧. 表情这里不要忘了加页面样式,表情选中样式.还有一个就是小bug就是,表情框被聊天框限制住了.另外,初始化表情插件的地方应该在有元素

个人微信群聊的实现

最近发现了一个很好的插件,插件可以绑定自己的个人微信,绑定微信之后就能快速接入一个机器人.其实和现在市面上的qq机器人类似,接入到微信中,可以做到单聊也可以在微信群中聊天. 下面就介绍这个插件怎么使用的 (1)插件可以去图灵机器人官网上进行下载http://tuling123.com/html/doc/weichat_robot.html (2)进入图灵机器人官网,注册并登入图灵账号,在个人中心板块的“机器人接入”页面获取图灵机器人key(该key作为识别每个用户的唯一标识) (3)下载解压之后