下载AsyncSockethttps://github.com/robbiehanson/CocoaAsyncSocket类库,将RunLoop文件夹下的AsyncSocket.h, AsyncSocket.m, AsyncUdpSocket.h, AsyncUdpSocket.m 文件拷贝到自己的project中
添加CFNetwork.framework, 在使用socket的文件头
#import <Foundation/Foundation.h>
#import "AsyncUdpSocket.h"
#import <CommonCrypto/CommonDigest.h>
typedef void (^dataBlock)(NSDictionary *response, NSString *responseString);
@interface UDPSocketSingleton : NSObject<AsyncUdpSocketDelegate>
@property (nonatomic, strong) AsyncUdpSocket *socket; // socket
@property (nonatomic, copy) NSString *socketHost; // socket的Host
@property (nonatomic, assign) UInt16 socketPort; // socket的prot
@property (nonatomic, strong) NSTimer *connectTimer; // 计时器
@property (nonatomic, strong) NSDictionary *socketResult;
@property (nonatomic, strong) dataBlock receiveData;
/**
* block回调方法,为了回调的时候少写代码
*/
- (void)receiveData:(dataBlock)block;
+ (UDPSocketSingleton *)sharedInstance; // 单例
- (void)socketConnectHost; // socket连接
-(void)cutOffSocket; // 断开socket连接
@end
通信中,涉及到byte字节流的解析,这个就需要根据实际情况的字节流数组中各个字节的要求和代表的数据内容来进行解析了。这些需要跟后台服务器沟通,确定每个字节代表了什么
#import "UDPSocketSingleton.h"
static UDPSocketSingleton *sharedInstance = nil;
@implementation UDPSocketSingleton
+ (UDPSocketSingleton *)sharedInstance {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedInstance = [[self alloc] init];
});
return sharedInstance;
}
#pragma mark - 连接host
- (void)socketConnectHost {
/**
* 初始化
*/
self.socket = [[AsyncUdpSocket alloc] initIPv4];
_socket.delegate = self;