Socket使用教程——AsyncSocket
来源:互联网 发布:西安软件开发 大专 编辑:程序博客网 时间:2024/06/01 10:00
我用的AsyncSocket,用来做智能家居WiFi通信方面。
1.从git上下载第三方:https://github.com/robbiehanson/CocoaAsyncSocket
导入AsyncSocket.h, AsyncSocket.m, AsyncUdpSocket.h, AsyncUdpSocket.m文件。
2.封装一个连接类。
DLSSocketConnectTool.h
//// DLSSocketConnectTool.h// Socket//// Created by dev on 16/2/19.// Copyright © 2016年 SWALLE. All rights reserved.//#import <Foundation/Foundation.h>#import "Common.h"@protocol DLSSocketConnectToolDelegate <NSObject>@optional/********************连接上WiFi是调用*******************/-(void)didConnect:(AsyncSocket *)socket WithHost:(NSString *)host WithPort:(UInt16)port;/********************断开连接时调用*********************/-(void)didDisconnect:(AsyncSocket *)socket;/********************发送命令成功***********************/-(void)succeedSendMessage:(AsyncSocket *)socket;/********************接收到服务器返回的数据***************/-(void)receivedDataWith:(NSDictionary *)dict;@end@interface DLSSocketConnectTool : NSObject<AsyncSocketDelegate>@property(nonatomic,strong)enum userData;@property(nonatomic, strong)id<DLSSocketConnectToolDelegate>delegate;/*********************单例*****************************/+(instancetype)shareSocket;/*********************连接WiFi*************************/-(void)connectSocket;/*********************断开WiFi*************************/-(void)disconnectSocket;/*********************发送数据**************************/-(void)sendmessage:(NSString *)message;@endDLSSocketConnectTool.m
//// DLSSocketConnectTool.m// Socket//// Created by dev on 16/2/19.// Copyright © 2016年 SWALLE. All rights reserved.//#import "DLSSocketConnectTool.h"@interface DLSSocketConnectTool()/** * AsyncSocket对象 */@property(nonatomic, strong)AsyncSocket *socket;/** * 连接超时的定时器 */@property(nonatomic, strong)NSTimer *timeoutTimer;/** * 用于心跳的定时器 */@property(nonatomic, strong)NSTimer *heardTimer;@end@implementation DLSSocketConnectTool-(AsyncSocket *)socket{ if (!_socket) { _socket = [[AsyncSocket alloc] init]; } return _socket;}#pragma mark -- 单例+(instancetype)shareSocket{ static DLSSocketConnectTool *socketConnect = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ socketConnect = [[super allocWithZone:NULL] init]; }); return socketConnect;}#pragma mark -- 连接socket-(void)connectSocket{ if (![self.socket isConnected]) { [self.socket connectToHost:IP onPort:Port error:nil]; } self.timeoutTimer = [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(cancleSocketConnect) userInfo:nil repeats:NO];}//连接超时提醒-(void)cancleSocketConnect{ HWLog(@"连接超时");}#pragma mark -- 主动断开连接-(void)disconnectSocket{ [self.socket disconnect]; self.socket.cutUserBool = YES; }#pragma mark -- 发送数据-(void)sendmessage:(NSString *)message{ [self.socket writeData:[DLStranslateStringToDataTool convertHexStrToData:message] withTimeout:2 tag:1];}#pragma mark -- AsyncSocketDelegate//连接上WiFi时调用- (void)onSocket:(AsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port{ self.socket.cutUserBool = NO; //心跳确保连接正常 self.heardTimer = [NSTimer scheduledTimerWithTimeInterval:30 target:self selector:@selector(heardConnectTimer) userInfo:nil repeats:YES]; [self.heardTimer fire]; //代理传值 [self.delegate didConnect:sock WithHost:host WithPort:port];}//断开连接时调用- (void)onSocketDidDisconnect:(AsyncSocket *)sock{ if (self.socket.cutUserBool == YES) { return; }else{ [self connectSocket]; } }//数据发送成功时调用- (void)onSocket:(AsyncSocket *)sock didWriteDataWithTag:(long)tag{ }//读取消息成功时调用- (void)onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag{ NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil]; [self.delegate receivedDataWith:dict]; }//心跳检测长连接-(void)heardConnectTimer{ NSString *longConnect = @"socket long connect"; [self.socket writeData:[DLStranslateStringToDataTool convertHexStrToData:longConnect] withTimeout:2 tag:2];}@end
辅助工具:DLStranslateStringToDataTool.h 将string类型转化为NSdata类型
//// DLStranslateStringToDataTool.m// Socket//// Created by dev on 16/2/19.// Copyright © 2016年 SWALLE. All rights reserved.//#import "DLStranslateStringToDataTool.h"@implementation DLStranslateStringToDataTool#pragma mark -- 十六进制转换为NSData数据流+ (NSData *)convertHexStrToData:(NSString *)str { if (!str || [str length] == 0) { return nil; } NSMutableData *hexData = [[NSMutableData alloc] initWithCapacity:8]; NSRange range; if ([str length] % 2 == 0) { range = NSMakeRange(0, 2); } else { range = NSMakeRange(0, 1); } for (NSInteger i = range.location; i < [str length]; i += 2) { unsigned int anInt; NSString *hexCharStr = [str substringWithRange:range]; NSScanner *scanner = [[NSScanner alloc] initWithString:hexCharStr]; [scanner scanHexInt:&anInt]; NSData *entity = [[NSData alloc] initWithBytes:&anInt length:1]; [hexData appendData:entity]; range.location += range.length; range.length = 2; } return hexData;}@end
源码连接地址:http://pan.baidu.com/s/1hrjXAS0
下载源码,把工具类拉入工程可直接使用。
0 0
- Socket使用教程——AsyncSocket
- Socket —>AsyncSocket(ios socket第三方框架 AsyncSocket使用简介,连接,心跳,断线,数据发送与接收)
- ios socket AsyncSocket使用
- iOS学习之Socket使用简明教程- AsyncSocket
- iOS学习之Socket使用简明教程- AsyncSocket
- iOS学习之Socket使用简明教程- AsyncSocket
- iOS学习之Socket使用简明教程- AsyncSocket
- iOS学习之Socket使用简明教程- AsyncSocket
- iOS学习之Socket使用简明教程- AsyncSocket
- iOS学习之Socket使用简明教程- AsyncSocket
- iOS学习之Socket使用简明教程- AsyncSocket
- iOS学习之Socket使用简明教程- AsyncSocket
- iOS学习之Socket使用简明教程- AsyncSocket
- iOS学习之Socket使用简明教程- AsyncSocket
- iOS学习之Socket使用简明教程- AsyncSocket
- iOS AsyncSocket使用教程
- ios下的Socket——AsyncSocket
- Socket编程——第三方类库 AsyncSocket
- 关于gridview的item内文字过长换行后显示不完全问题
- 常见C++内存池技术
- Clob 转String 类型使用 以及转码问题
- iphone分辨率终极指南(含iphone6/6+)
- system阻塞SIGCHLD信号原因
- Socket使用教程——AsyncSocket
- iOS9下有关CoreLocation学习三
- Codeforces 416E. President's Path 图论 最短路 处理技巧
- 《数据结构与算法分析(c 描述)》—— 第六章笔记
- NS2在eclipse下的部署以及调试
- xcode 调试
- 华尔街见闻-2016年2月
- Android allowTaskReparenting clearTaskOnLaunch alwaysRetainTaskState
- ELK(ElasticSearch, Logstash, Kibana)搭建实时日志分析平台