做了好久即时通讯的项目,给大家分享一下自己小小的经验。 AsyncSocket是一个第三方封装好的Socket 之前多废话几句
导入工程后如果你是TCP的话 直接添加头文件AsyncSocket.h就可以了 如果你是UDP 导入AsyncUdpSocket.h
首先
设置scoket代理
clientSocket = [[AsyncSocket alloc]initWithDelegate:self];//设置代理
[clientSocket setRunLoopModes:[NSArray arrayWithObject:NSRunLoopCommonModes]];
进行连接
if(![clientSocket connectToHost:@"xxx.xxx.x.xxx" onPort:portLogin error:&error])
{
NSLog(@"连接错误");
}
连接成功后 会调用以下代理方法
- (void)onSocket:(AsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port
{//连接成功后你需要进行什么操作 在这里做就可以了。。。 有点废话了}
连接错误会调用
//Socket出现错误
- (void)onSocket:(AsyncSocket *)sock willDisconnectWithError:(NSError *)err
{
NSLog(@"willDisconnectWithError:%@",err);
}
数据发送后在此调用 读取
- (void)onSocket:(AsyncSocket *)sock didWriteDataWithTag:(long)tag
{
[sock readDataWithTimeout: -1 tag:0];//进行监听
}
读取数据 如果此时有数据返回时会进入到下面这个代理方法
//读取数据&处理接收的数据
- (void)onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag
{//对数据进行处理 如:你的数据包有标识符 长度那需要你们自己和服务端进行沟通 数据包是什么结构的了}
写入数据发送数据 只要有发送数据的事件必须要监听 如果你只发送了数据 没有进行监听 那恭喜你 你永远得不到数据
[clientSocket writeData:[DataManager initWithData:[ReturnInformation loginInformation]] withTimeout:-1 tag:0];
[clientSocket readDataWithTimeout:-1 tag:0];//监听
有的朋友会问我用的是socket 但是我需要发送语音该怎么办 下一章我会给大家分享如何使用Speex传送语音文件
UDP不需要我说了 大家自己看吧