2016-06-08 4 views
5

Ich habe eine Anwendung, in der ich Daten an den Server über Socket-Verbindung senden und Daten lesen muss, die vom Server gesendet werden. Ich verwende AsyncSocket Klasse für schreiben und lesen von Daten. Ich habe Erfolg, Daten auf dem Server zu schreiben, und der Server kann die Daten sehen, die von der Anwendung gesendet wurden. Nun, Problem ist, dass, wenn Server einige Daten an die Anwendung senden, wie kann ich diese Daten mit AsyncSocket Klasse erhalten. Unten ist mein Code. Ich habe Delegaten Methode zum Lesen von Daten, aber es nie aufgerufen.Wie erhalte ich Daten vom Server über den Socket in iOS?

var socket = AsyncSocket() 

socket = AsyncSocket(delegate: self) 
self.socketConnect() 

func socketConnect() { 
     do { 
      try socket?.connectToHost("IP Address", onPort: 6968) 
     } catch _ as NSError { 

     } 
    } 



//MARK: - AsyncSocket Delegates method 

    func onSocket(sock: AsyncSocket!, didConnectToHost host: String!, port: UInt16) { 
     print("Connected to host : \(host) with Port : \(port)") 


     let alert:UIAlertController = UIAlertController(title: "Connected", message: "Host:\(host) ** Port:\(port)", preferredStyle:.Alert) 
     self.presentViewController(alert, animated: true, completion: nil) 
     let action:UIAlertAction = UIAlertAction(title: "Ok", style: .Default) { (UIAlertAction) -> Void in 
      print("Ok Pressed") 
     } 
     alert .addAction(action) 

     let dict = ["iUserId":"100","iRideId":"276","type":"client"] // For client side 
     var jsonString = NSString() 
     do { 
      let data = try NSJSONSerialization.dataWithJSONObject(dict , options: NSJSONWritingOptions.PrettyPrinted) 
      jsonString = NSString(data: data, encoding: NSUTF8StringEncoding)! 

     }catch let error as NSError { 
      print(error) 
     } 
     let reqData = jsonString.dataUsingEncoding(NSUTF8StringEncoding) 
     socket.writeData(reqData, withTimeout: 1.0, tag: 100) 

    } 

    func onSocket(sock: AsyncSocket!, didReadPartialDataOfLength partialLength: UInt, tag: Int) { 
     print("Read partial data") 
    } 

    func onSocket(sock: AsyncSocket!, didWriteDataWithTag tag: Int) { 
     print("Data write successfully") 
    } 

    func onSocket(sock: AsyncSocket!, didReadData data: NSData!, withTag tag: Int) { 
     print("Data read successfully") 
    } 

    func onSocket(sock: AsyncSocket!, willDisconnectWithError err: NSError!) { 
     print("Socket disconnect with error :\(err.description)") 
    } 

    func onSocket(sock: AsyncSocket!, didAcceptNewSocket newSocket: AsyncSocket!) { 
     print("Accept new socket") 
    } 
+0

Erbt diese Klasse (der Delegat) von 'NSObject'? http://stackoverflow.com/a/24225381/653513 –

Antwort

1

Ich habe die Antwort für mich selbst gefunden. Was ich verpasst habe ist, dass ich readdata Zeile setzen muss, wenn der Socket mit dem Host verbunden ist. Nach dem Schreiben wird diese didReadData-Methode aufgerufen und in dieser Methode muss auch ein einzelner Zeilencode geschrieben werden, den ich in der didConnectToHost-Methode geschrieben habe.

func socket(sock: GCDAsyncSocket!, didConnectToHost host: String!, port: UInt16) { 
     print("Connected to host : \(host) with Port : \(port)") 
     socket.readDataWithTimeout(-1, tag: 0) 
    } 

func socket(sock: GCDAsyncSocket!, didReadData data: NSData!, withTag tag: Int) { 
     print("Data read successfully") 


     socket.readDataWithTimeout(-1, tag: 0) 
} 
Verwandte Themen