IOS socket GCDAsyncSocket
2012-08-16 20:05
423 查看
开源地址:https://github.com/robbiehanson/CocoaAsyncSocket/wiki/Intro_GCDAsyncSocket
怎么样使用:看网站下面的具体使用说明。
封装后的代码;
//
// ClientSocket.h
// GameClientEngine
//
// Created by chao zhang on 12-2-22.
// Copyright (c) 2012骞?hangzhou. All rights reserved.
//
#import <UIKit/UIKit.h>
#import "GCDAsyncSocket.h"
#import "AmfMessage.h"
static const int HEADTAG = 0;
static const int BODYTAG = 1;
@class AmfHandler;
@interface ClientSocket : GCDAsyncSocket <UIApplicationDelegate>
@property(nonatomic,assign)int header;
@property(nonatomic, retain)AmfHandler* amfHandler;
-(BOOL)bind:(NSString*) host onPort:(int)port;
-(void) writer:(AmfMessage*)msg;
-(void)shutdown;
@end
//
// ClientSocket.m
// GameClientEngine
//
// Created by chao zhang on 12-2-22.
// Copyright (c) 2012骞?hangzhou. All rights reserved.
//
#import "ClientSocket.h"
#import "AmfMessageEncoder.h"
#import "AmfMessageDecoder.h"
#import "AmfHandler.h"
@implementation ClientSocket
@synthesize header;
@synthesize amfHandler;
-(id)init{
self = [super initWithDelegate:self delegateQueue:dispatch_get_main_queue()];
header = 4;
amfHandler = [[AmfHandler alloc]init];
return self;
}
-(void)writer:(AmfMessage *)msg{
AmfMessageEncoder* encoder = [[AmfMessageEncoder alloc]init];
NSData * encodeData = [encoder encode:msg];
[self writeData:encodeData withTimeout:-1 tag:2];
}
-(void) socket:(ClientSocket *)sock didReadData:(NSData *)data withTag:(long)tag
{
if(tag == 0){
int8_t b[header];
[data getBytes:b length:header];
NSMutableData* tempData = [[NSMutableData alloc] init];
for(int bb=header-1 ;bb > -1;bb--){
int8_t temp = b[bb];
[tempData appendBytes:&temp length:sizeof(temp)];
}
int headlength;
[tempData getBytes:&headlength range:NSMakeRange(0, sizeof(headlength))];
[sock readDataToLength:headlength withTimeout:-1 tag:BODYTAG];
}else if(tag == 1){
AmfMessageDecoder* decoder = [[AmfMessageDecoder alloc]init];
AmfMessage* msg = [decoder decode:data];
[amfHandler messageReceived:msg socket:self];
[sock readDataToLength:header withTimeout:-1 tag:HEADTAG];
}
}
-(BOOL)bind:(NSString *)host onPort:(int)port{
NSError *error = nil;
if(![self connectToHost:host onPort:port error:&error]){
NSLog(@"Error connecting: %@", error);
return NO;
}else{
[self readDataToLength: header withTimeout:-1 tag:HEADTAG];
return YES;
}
}
-(void)shutdown{
[self disconnect];
}
@end
怎么样使用:看网站下面的具体使用说明。
封装后的代码;
//
// ClientSocket.h
// GameClientEngine
//
// Created by chao zhang on 12-2-22.
// Copyright (c) 2012骞?hangzhou. All rights reserved.
//
#import <UIKit/UIKit.h>
#import "GCDAsyncSocket.h"
#import "AmfMessage.h"
static const int HEADTAG = 0;
static const int BODYTAG = 1;
@class AmfHandler;
@interface ClientSocket : GCDAsyncSocket <UIApplicationDelegate>
@property(nonatomic,assign)int header;
@property(nonatomic, retain)AmfHandler* amfHandler;
-(BOOL)bind:(NSString*) host onPort:(int)port;
-(void) writer:(AmfMessage*)msg;
-(void)shutdown;
@end
//
// ClientSocket.m
// GameClientEngine
//
// Created by chao zhang on 12-2-22.
// Copyright (c) 2012骞?hangzhou. All rights reserved.
//
#import "ClientSocket.h"
#import "AmfMessageEncoder.h"
#import "AmfMessageDecoder.h"
#import "AmfHandler.h"
@implementation ClientSocket
@synthesize header;
@synthesize amfHandler;
-(id)init{
self = [super initWithDelegate:self delegateQueue:dispatch_get_main_queue()];
header = 4;
amfHandler = [[AmfHandler alloc]init];
return self;
}
-(void)writer:(AmfMessage *)msg{
AmfMessageEncoder* encoder = [[AmfMessageEncoder alloc]init];
NSData * encodeData = [encoder encode:msg];
[self writeData:encodeData withTimeout:-1 tag:2];
}
-(void) socket:(ClientSocket *)sock didReadData:(NSData *)data withTag:(long)tag
{
if(tag == 0){
int8_t b[header];
[data getBytes:b length:header];
NSMutableData* tempData = [[NSMutableData alloc] init];
for(int bb=header-1 ;bb > -1;bb--){
int8_t temp = b[bb];
[tempData appendBytes:&temp length:sizeof(temp)];
}
int headlength;
[tempData getBytes:&headlength range:NSMakeRange(0, sizeof(headlength))];
[sock readDataToLength:headlength withTimeout:-1 tag:BODYTAG];
}else if(tag == 1){
AmfMessageDecoder* decoder = [[AmfMessageDecoder alloc]init];
AmfMessage* msg = [decoder decode:data];
[amfHandler messageReceived:msg socket:self];
[sock readDataToLength:header withTimeout:-1 tag:HEADTAG];
}
}
-(BOOL)bind:(NSString *)host onPort:(int)port{
NSError *error = nil;
if(![self connectToHost:host onPort:port error:&error]){
NSLog(@"Error connecting: %@", error);
return NO;
}else{
[self readDataToLength: header withTimeout:-1 tag:HEADTAG];
return YES;
}
}
-(void)shutdown{
[self disconnect];
}
@end
相关文章推荐
- iOS socket 连接第三方库asyncsocket 和GCDasyncsocket
- 【IOS网络通信】socket第三方库 AsyncSocket(GCDAsyncSocket)
- ios GCDAsyncSocket(Tcp)的使用
- iOS:GCDAsyncSocket 的二次封装,粘包处理
- 【即时通讯】iOS 基于GCDAsyncSocket快速开发Socket通信
- 46.【IOS网络通信】socket第三方库 AsyncSocket(GCDAsyncSocket)
- (六十五)iOS的socket实现(GCDAsyncSocket)
- iOS中使用GCDAsyncSocket建立长连接
- iOS 通过GCDAsyncSocket建立tcp链接
- (六十五)iOS的socket实现(GCDAsyncSocket)
- iOS socket第三方库 AsyncSocket(GCDAsyncSocket)
- GCDAsyncSocket类库,IOS下TCP通讯使用心得
- iOS学习笔记4-GCDAsyncUdpSocket的使用(实现异步发送接收数据)
- GCDAsyncSocket类库,IOS下TCP通讯使用心得
- iOS scoket 再探。换成了GCDAsyncSocket,并且实现了双方聊天
- iOS 基于GCDAsyncSocket快速开发Socket通信
- iOS学习笔记5-GCDAsyncUdpSocket中的dispatch_queue_set_specific
- iOS开发——GCDAsyncSocket
- IOS GCDAsyncSocket
- iOS Socket/Tcp编程 GCDAsyncSocket的实战(带回调)