Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

GCDAsyncSocket in Swift

I want to open a TCP connection with an OBD dongle based on ELM327 chip. So I have decided to use GCDAsyncSocket library. I wrote this code,

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).")
   }
}

but when I run the code , the function:

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

never gets run.

Where is the problem?

Can anybody advice me about how to transmit and recive literal byte string.

Thanks

like image 545
Fco. Alejandro Jurado Pérez Avatar asked Oct 30 '22 08:10

Fco. Alejandro Jurado Pérez


1 Answers

I also had a problem, and I solve it like below.

You have to make class inherit from 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")
    }

}

Below link can help you.

Implement AsyncSocket callbacks in a swift class

like image 81
Soaple Avatar answered Nov 15 '22 05:11

Soaple