天天看點

(轉)iPhone wifi使用socket連接配接Internet

1.使用AsyncSocket(http://code.google.com/p/cocoaasyncsocket/)

來做為Socket的一個基礎庫.

2.在該庫裡面提供了一個EchoServer,我們可以利用這個程式直接在MAC系統上面運作一個測試伺服器起來.

3.根據AsyncSocket(http://code.google.com/p/cocoaasyncsocket/wiki/iPhone)的WIKI将AsyncSocket加入到iPhone的工程裡面,記得将TARGET_OS_IPHONE這個宏在工程上面給定義一下.

4.編譯工程通過.

5.連接配接伺服器代碼:

**********************************************

// 建立一個Socket實體并連接配接到本地伺服器的7777端口

_client = [[AsyncSocket alloc] initWithDelegate:self];

NSError *err = nil;

if (![_client connectToHost:@"127.0.0.1" onPort:7777 withTimeout:1.0f error:&err]) {

NSLog(@"client net:%@", err);

}

// 添加事件響應函數

A:- (void)onSocket:(AsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port;

B:- (void)onSocketDidSecure:(AsyncSocket *)sock;

C:- (void)onSocket:(AsyncSocket *)sock willDisconnectWithError:(NSError *)err;

D:- (void)onSocketDidDisconnect:(AsyncSocket *)sock;

E:- (void)onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag;

// 在函數A中請求讀取資料, AsyncSocket内部會在有接收到資料的時候調用函數E

[_client readDataWithTimeout:-1 tag:0];

// 函數E被調用過之後這個讀取請求就結束了,我們不想讓它結束掉, 是以在函數E結尾處加入, 這樣讀取過程就可以一直持繼下去了

// 在函數A裡面将傳入的sock給記錄下來,這就是我們連接配接的伺服器的socket接口了

_server = sock;

// 發送資料到伺服器

NSData* data;

[_server writeData:data withTimeout:-1 tag:1];

6.這樣子我們基本就可以實作與伺服器進行收發消息的過程了(注意:這些回調函數都是在主線程進行的,并未在其它的線程中)

7.其它的響應事件未去做過多關注, 請自行解決了.

繼續閱讀