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 = ""
    let port:UInt16 = 35000
    var socket:GCDAsyncSocket!

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

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

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

    @IBAction func connect(sender: AnyObject) {

   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.


Solution #1:

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() {

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

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


Below link can help you.

Implement AsyncSocket callbacks in a swift class

Respondent: Soaple

Solution #2:

FYI, if anyone else is running into the problem where didConnectToHost is not being called and seem to have tried everything else: I realized I was initializing my socket service class in my AppDelegate. When I moved the code elsewhere it worked and the callback was called.

Respondent: Eden

The answers/resolutions are collected from stackoverflow, are licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0 .

Leave a Reply

Your email address will not be published.