AsyncSocket 下載位置
因為專案是 swift 專案,要使用 objecitive-c 的函式庫要在 Header 檔中 import
1.複製AsyncSocket.m
及AsyncSocket.h
到專案中,xcode 會問你是否建立 Bridge file,確定建立
2.在 你的專案名稱-Bridging-Header.h
檔中加入#import "AsyncSocket.h"
3.建立連線物件var socket: AsyncSocket = AsyncSocket(delegate: 委派對象)
var socket: AsyncSocket!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
socket = AsyncSocket(delegate: self)
do {
try socket.connectToHost("xxx.xxx.xxx.xxx", onPort: xxxx)
}catch let error as NSError {
print(error)
}
}
4.委派物件實作 AsyncSocketDelegate 協定,此協定中所有 callback 都是 optional 的,
這邊紀錄『連線』、『收』、『送』、『斷線』事件
連線
func onSocket(sock: AsyncSocket!, didConnectToHost host: String!, port: UInt16) {
let bytearr:[UInt8] = [1,2,3]
let data: NSData = NSData(bytes: bytearr, length: bytearr.count)
socket.writeData(data, withTimeout: 0, tag: 0)
socket.readDataWithTimeout(10, tag: 0)
}
這邊內容是一旦連線就送一個 [1, 2, 3] 的陣列過去,並且監聽一個 10 秒 timeout 的回傳事件
收
func onSocket(sock: AsyncSocket!, didReadData data: NSData!, withTag tag: Int) {
print("read\(data.getByteArray())")
socket.readDataWithTimeout(10, tag: 0)
}
收到以後再次監聽是否還有 data 回傳
送
let bytearr:[UInt8] = [1,2,3]
let data: NSData = NSData(bytes: bytearr, length: bytearr.count)
socket.writeData(data, withTimeout: 0, tag: 0)
斷線
func onSocketDidDisconnect(sock: AsyncSocket!) {
print("disconnect")
}
func onSocket(sock: AsyncSocket!, willDisconnectWithError err: NSError!) {
print("will disconnect with error:\(err)")
socket.disconnect()
}
特別要注意的是收的部分,叫他收一次他就收一次,所以如果要持續監聽在收到一個以後就要再次呼叫收,不然就不收了
沒有留言:
張貼留言