我希望在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)")
}
}