2016-03-04 60 views
2

我想打開一個基於ELM327芯片的OBD加密狗的TCP連接。所以我決定使用GCDAsyncSocket庫。我寫了這個代碼,Swift中的GCDAsyncSocket

import UIKit 
import CocoaAsyncSocket 

class ViewController: UIViewController, GCDAsyncSocketDelegate { 

    let addr = "192.168.0.10" 
    let port:UInt16 = 35000 
    var socket:GCDAsyncSocket! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     socket = GCDAsyncSocket(delegate: self, delegateQueue: dispatch_get_main_queue()) 
     do { 
      try socket.connectToHost(addr, onPort: port) 
     } catch let e { 
      print(e) 
     } 

    // Do any additional setup after loading the view, typically from a nib. 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    @IBAction func connect(sender: AnyObject) { 
     print("Clicked") 
    } 

    func socket(socket : GCDAsyncSocket, didConnectToHost host:String, port p:UInt16) 
    { 
     print("Connected to \(addr) on port \(port).") 
    } 
} 

但是當我運行的代碼,功能:

func socket(socket : GCDAsyncSocket, didConnectToHost host:String, port p:UInt16) 

永遠不會被運行。

問題在哪裏?

任何人都可以建議我如何傳輸和recive文字字節字符串。

謝謝

回答

1

我也有一個問題,我像下面解決它。

你必須從NSObject繼承類。

import Foundation 
import CocoaAsyncSocket 

public class MySocket: NSObject, AsyncSocketDelegate { 

    var mSocket: AsyncSocket! 

    override init() { 
     super.init() 

     let mSocket = AsyncSocket.init(delegate: self) 
     do { 
      print("Connecing to socket server...") 
      try mSocket.connectToHost("google.com", onPort: 80) 
     } catch let error { 
      print(error) 
     } 
    } 

    @objc public func onSocket(sock: AsyncSocket!, didConnectToHost host: String!, port: UInt16) { 
     print("success") 
    } 

} 

下面的鏈接可以幫助你。

Implement AsyncSocket callbacks in a swift class

0

僅供參考,如果其他人正在運行到哪裏didConnectToHost不會被調用的問題,似乎已經嘗試了一切:我意識到我初始化我的插座服務類在我的AppDelegate。當我在別處移動代碼時,它的工作和回調被調用。