Socket使用教程 AsyncSocket

2021-07-10 02:44:48 字數 3648 閱讀 3759

我用的asyncsocket,用來做智慧型家居wifi通訊方面。

匯入asyncsocket.h, asyncsocket.m, asyncudpsocket.h, asyncudpsocket.m檔案。

2.封裝乙個連線類。

dlssocketconnecttool.h

//

// dlssocketconnecttool.h

// socket

//// created by dev on 16/2/19.

//#import #import "common.h"

@protocol dlssocketconnecttooldelegate @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

@inte***ce dlssocketconnecttool : nsobject@property(nonatomic,strong)enum userdata;

@property(nonatomic, strong)iddelegate;

/*********************單例*****************************/

+(instancetype)sharesocket;

/*********************連線wifi*************************/

-(void)connectsocket;

/*********************斷開wifi*************************/

-(void)disconnectsocket;

/*********************傳送資料**************************/

-(void)sendmessage:(nsstring *)message;

@end

dlssocketconnecttool.m

//

// dlssocketconnecttool.m

// socket

//// created by dev on 16/2/19.

//#import "dlssocketconnecttool.h"

@inte***ce dlssocketconnecttool()

/** * asyncsocket物件

*/@property(nonatomic, strong)asyncsocket *socket;

/** * 連線超時的定時器

*/@property(nonatomic, strong)nstimer *timeouttimer;

/** * 用於心跳的定時器

*/@property(nonatomic, strong)nstimer *heardtimer;

@end

@implementation dlssocketconnecttool

-(asyncsocket *)socket

return _socket;

}#pragma mark -- 單例

+(instancetype)sharesocket);

return socketconnect;

}#pragma mark -- 連線socket

-(void)connectsocket

self.timeouttimer = [nstimer scheduledtimerwithtimeinterval:2 target:self selector:@selector(canclesocketconnect) userinfo:nil repeats:no];

}//連線超時提醒

-(void)canclesocketconnect

#pragma mark -- 主動斷開連線

-(void)disconnectsocket

#pragma mark -- 傳送資料

-(void)sendmessage:(nsstring *)message

#pragma mark -- asyncsocketdelegate

//連線上wifi時呼叫

- (void)onsocket:(asyncsocket *)sock didconnecttohost:(nsstring *)host port:(uint16)port

//斷開連線時呼叫

- (void)onsocketdiddisconnect:(asyncsocket *)sockelse

}//資料傳送成功時呼叫

- (void)onsocket:(asyncsocket *)sock didwritedatawithtag:(long)tag

//讀取訊息成功時呼叫

- (void)onsocket:(asyncsocket *)sock didreaddata:(nsdata *)data withtag:(long)tag

//心跳檢測長連線

-(void)heardconnecttimer

@end

輔助工具:

dlstranslatestringtodatatool.h 將string型別轉化為nsdata型別 

//

// dlstranslatestringtodatatool.m

// socket

//// created by dev on 16/2/19.

//#import "dlstranslatestringtodatatool.h"

@implementation dlstranslatestringtodatatool

#pragma mark -- 十六進製制轉換為nsdata資料流

+ (nsdata *)converthexstrtodata:(nsstring *)str

nsmutabledata *hexdata = [[nsmutabledata alloc] initwithcapacity:8];

nsrange range;

if ([str length] % 2 == 0) else

for (nsinteger i = range.location; i < [str length]; i += 2)

return hexdata;

}@end

Socket程式設計教程

socket程式設計是嵌入式開發的基本功,理解並熟練應用socket是很重要的,一段時間不寫相關的 的難免會有所遺忘,前幾天重寫時回顧了下,找到一篇不錯的教程,分享一下 socket是什麼 套接字有哪些型別 面向連線和無連線的套接字到底有什麼區別 osi網路七層模型簡明教程 tcp ip協議族 ip...

SpringBoot使用 Async非同步呼叫方法

有時間一些比較耗時的方法需要使用非同步呼叫,之前會自己維護乙個執行緒池,然後非同步呼叫,但是在spring環境下可以乙個 async輕鬆搞定。springboot要使用 async需要以下兩個步驟 1.使用 enableasync開啟非同步 2.定義spring元件,使用 component和 as...

async和await的使用

async其實是es7的才有的,是非同步操作的進化,其實就是封裝乙個promise的物件返回 async function test console.log test promiseasync方法在普通的函式前加上 async 關鍵字即可。執行這個函式,發現並沒有返回1111,而是通過promise...