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

來源:互聯網
上載者:User

標籤:

很多同學一聽到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

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.