首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift中的GCDAsyncSocket

Swift中的GCDAsyncSocket
EN

Stack Overflow用户
提问于 2016-03-05 04:17:20
回答 2查看 8.2K关注 0票数 5

我想打开一个基于ELM327芯片的OBD加密狗的TCP连接。所以我决定使用GCDAsyncSocket库。我写了这段代码,

代码语言:javascript
复制
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).")
   }
}

但是当我运行代码时,函数:

代码语言:javascript
复制
func socket(socket : GCDAsyncSocket, didConnectToHost host:String, port p:UInt16)

永远都不会跑。

问题出在哪里?

谁能建议我如何发送和接收文字字节串。

谢谢

EN

回答 2

Stack Overflow用户

发布于 2016-05-11 09:45:01

我也遇到了一个问题,我像下面这样解决了它。

你必须让类继承自NSObject。

代码语言:javascript
复制
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

票数 3
EN

Stack Overflow用户

发布于 2017-05-17 05:39:25

仅供参考,如果其他任何人遇到didConnectToHost没有被调用的问题,并且似乎已经尝试了其他方法:我意识到我正在AppDelegate中初始化我的套接字服务类。当我将代码移到其他地方时,它工作了,并且回调被调用了。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35805299

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档