使用CocoaAsyncSocket在套接字编程中使用json发送整数头

时间:2017-06-28 06:19:24

标签: swift sockets tcp cocoaasyncsocket

我希望在swift中使用CocoaAsyncSocket库将格式为[0xABCD,0F,0,0]的头与json {“cmd”:00}一起发送到服务器。我可以成功发送json字符串。这是我不知道如何发送的标题部分。请查看我到目前为止编写的代码。

import UIKit
import CocoaAsyncSocket

class SESocketCommnViewController: UIViewController , GCDAsyncSocketDelegate
{
    var socket = GCDAsyncSocket()
    let ipAddr = "192.168.8.1"
    let port: UInt16 = 5000

let keyData: NSData = NSData(bytes:[43981,15,0,0] as [uint], length: 4*4)

override func viewDidLoad() {
    super.viewDidLoad()

    socket = GCDAsyncSocket(delegate: self, delegateQueue: DispatchQueue.main)
    do {
        try socket.connect(toHost: ipAddr, onPort: port)
    } catch let error {
        print(error)
    }
}

func socket(_ sock: GCDAsyncSocket, didConnectToHost host: String, port: UInt16) {
    print("connected to host!!")
}

    @IBAction func onSendMessageToServer(_ sender: UIButton)
    {
        let myJsonDict = ["cmd": 01]
//        socket.write(keyData as Data, withTimeout: 0, tag: 1)
//        let message = "0xABCD1500"+jsonStringify(value: myJsonDict as AnyObject)

        var message = jsonStringify(value: myJsonDict as AnyObject)
        print("message: \(message)")
        var messageDataToSend = message.data(using: .utf8)

        //socket.write(keyData as Data, withTimeout: 0, tag: 0)

        sendCommand(command: messageDataToSend!)

        print("send message tapped")
    }


func sendCommand(command: Data)
{
    print("commandToSend: \(command)")

    socket.write(command, withTimeout: 0, tag: 0)

    socket.readData(withTimeout: 0, tag: 0)
}

func jsonStringify(value: AnyObject) -> String
{
    print("valuePassed: \(value)")

    if JSONSerialization.isValidJSONObject(value)
    {
        var jsonData = NSData()

        do {
            jsonData =  try JSONSerialization.data(withJSONObject: value, options: .prettyPrinted) as NSData
            print("jsonData: \(jsonData)")

        } catch let error as NSError
        {
            print("error if any,\(error)")
        }
        if let jsonString = NSString(data: jsonData as Data, encoding: String.Encoding.utf8.rawValue)
        {
            print("jsonString: \(jsonString)")
            return jsonString as String
        }
    }
    return ""
}

func socket(_ sock: GCDAsyncSocket, didWriteDataWithTag tag: Int) {
    print("Writing successfull")
}

func socket(_ sock: GCDAsyncSocket, didRead data: Data, withTag tag: Int) {
    print("Reading data success: \(data)")

    let response = NSString(data: data, encoding: String.Encoding.utf8.rawValue)
    print("response received: \(response)")
}
}

0 个答案:

没有答案