iOS Socket/Tcp編程 GCDAsyncSocket的實戰(帶回調)


很多同學一聽到Socket TCP UDP 這幾個字眼感覺特別害怕,很怕在工作當中使用,因為他們太底層了.下面我把我在工作中使用Socket類庫GCDAsyncSocket進行一次實戰

文章中只適用於小型數據傳輸, 如果比較到,例如音頻文件的話,請自行拼接data.

首先向工程導入GCDAsyncSocket.h/GCDAsyncSocket.m

下載地址:鏈接:http://pan.baidu.com/s/1c1bHytM密碼: p22g

然后創建一個單例類Client 繼承於NSObject

Client.h 文件內容如下

 

#import <Foundation/Foundation.h>

typedef void(^BLOCK)(idresult);

@interface RCClient : NSObject

 

+ (Client *)shareInstance;

- (void)sendMessage:(NSString *)strcomplete:(BLOCK)block;

@end

 

Client.m 文件內容如下:

 

#import "Client.h"

#import "GCDAsyncSocket.h"

// TCP連接

@interface Client ()

 

@property (nonatomic,strong)GCDAsyncSocket *socket;

@property (nonatomic,copy)BLOCK block;

@property (nonatomic,assign)NSInteger counter;

#define IP @"192.168.1.100"

#define PORT 5555

@end

 

@implementationClient

 

- (instancetype)init

{

self = [superinit];

if (self) {

[selfcreateConnection];

}

returnself;

}

 

+ (Client *)shareInstance {

staticClient *client =nil;

staticdispatch_once_t onceToken;

dispatch_once(&onceToken, ^{

client = [[Clientalloc]init];

});

return client;

}

 

#pragma mark - 建立連接

 

- (void)createConnection {

self.socket = [[GCDAsyncSocketalloc]initWithDelegate:selfdelegateQueue:dispatch_get_main_queue()];

// 連接

NSError *error =nil;

[self.socketconnectToHost:IPonPort:PORTerror:&error];

 

if(error) {

NSLog(@"連接錯誤%@", error);

return;

}

[self.socketreadDataWithTimeout:-1tag:0];

}

 

// 發送數據

- (void)sendMessage:(NSString *)str tag:(NSInteger)tag complete:(BLOCK)block {

self.block = block;

[self.socketwriteData:[strdataUsingEncoding:NSUTF8StringEncoding]withTimeout:-1tag:0];

[self.socket readDataWithTimeout:-1 tag:0];

}

 

// tcp連接

- (void)socket:(GCDAsyncSocket *)sock didConnectToHost:(NSString *)host port:(uint16_t)port {

NSLog(@"連接成功");

[self.socketreadDataWithTimeout:-1tag:0];

}

 

- (void)disconnection {

[self.socketdisconnect];

[self.socketreadDataWithTimeout:-1tag:0];

}

 

 

// 服務器返回數據

- (void)socket:(GCDAsyncSocket*)sock didReadData:(NSData *)data withTag:(long)tag {

NSString *str = [[NSStringalloc]initWithData:dataencoding:NSUTF8StringEncoding];

NSLog(@"str = %@", result);

self.block(result);

[self.socketreadDataWithTimeout:-1tag:0];

}

 

 

- (void)socketDidDisconnect:(GCDAsyncSocket *)sock withError:(NSError *)err {

NSLog(@"已經斷開連接!");

 

[self.socketreadDataWithTimeout:-1tag:0];

}

 

@end

轉自:http://blog.5ibc.net/p/32842.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM