2016-06-08 20 views
5

Sunucuya gönderecek olan veriyi soket bağlantısı kullanarak veriye göndermem gereken bir uygulama var. Yazma ve okuma verileri için AsyncSocket sınıfını kullanıyorum. Sunucuya veri yazabilme konusunda başarılı oldum ve sunucuya uygulama tarafından gönderilen verileri görebiliyorum. Şimdi, sorun, sunucuya bazı verileri veri gönderdiğinde, o zaman bu verileri AsyncSocket sınıfını kullanarak nasıl alabilirim. Aşağıda benim kodum. Veri okumak için delegeler yöntemini koydum ama asla aramadı.iOS'taki sunucudan veri nasıl alınır?

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

Bu sınıf (temsilci) NSObject öğesinden mi devralınır? http://stackoverflow.com/a/24225381/653513 –

cevap

1

Kendim için yanıt buldum. Kaçırdığım şey, yuva ana bilgisayara bağlandığında readdata satırı koymak zorunda olduğumdur. Bu yazdıktan sonra didReadData yöntemi çağrılacak ve bu yöntemde de didConnectToHost yönteminde yazdığım tek bir satır kodu yazmak zorunda.

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