在Swift中使用GCDAsyncSocket

5

我想基于ELM327芯片的OBD设备建立TCP连接。因此,我决定使用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)

永远不会被运行。

问题出在哪里?

有人能否给我建议如何传输和接收字面量的字节数组。

谢谢。

2个回答

3
我也遇到了一个问题,我是这样解决的。
你需要让类继承自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")
    }

}

以下链接可以帮助您。

在Swift类中实现AsyncSocket回调


-1

如果有人遇到了didConnectToHost没有被调用的问题,并且似乎已经尝试了所有其他方法,请注意:我意识到我在AppDelegate中初始化了我的socket服务类。当我将代码移动到其他地方时,它就可以正常工作并调用回调函数了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接