简体   繁体   English

如何通过iOS中的套接字从服务器接收数据?

[英]How to receive data from server through socket in iOS?

I have an application in which i have to send data to server using socket connection and read data which will send by server. 我有一个应用程序,我必须使用套接字连接将数据发送到服务器并读取将由服务器发送的数据。 I am using AsyncSocket class for write and read data. 我正在使用AsyncSocket类来写入和读取数据。 I got success to write data on server and server can see the data which was send by application. 我成功地在服务器上写入数据,服务器可以看到应用程序发送的数据。 Now, problem is that whenever server send some data to application then how can i receive those data using AsyncSocket class. 现在,问题是每当服务器向应用程序发送一些数据时,我如何使用AsyncSocket类接收这些数据。 Below is my code. 以下是我的代码。 I put delegates method for reading data but it never called. 我把代理方法用于读取数据,但它从未调用过。

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

I have found answer for my self. 我找到了自己的答案。 What i have missed is that i have to put readdata line when socket is connected to host. 我错过的是当socket连接到主机时我必须放入readdata线。 So after write this didReadData method will be called and in that method also have to write a single line code that i wrote in didConnectToHost method. 所以写完之后会调用didReadData方法,并且该方法也必须编写我在didConnectToHost方法中编写的单行代码。

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM