我正在使用Swift Network框架制作一个简单的测试应用程序。有一个服务器,一个客户端(都是iOS模拟器),并且已经成功地建立了它们之间的TCP连接。我正在尝试发送一系列短消息。
服务器正在发送由1到999的自然数组成的字符串。每个数字都作为单独的数据发送,isComplete和contentContext默认值分别为true和.defaultMessage。
服务器正在发送由1到999的自然数组成的字符串。每个数字都作为单独的数据发送,isComplete和contentContext默认值分别为true和.defaultMessage。
var count = 0
func send(data: Data) {
self.connection.send(content: data, completion: .contentProcessed( { error in
if let error = error {
self.connectionDidFail(error: error)
return
}
self.count += 1
let newData = "\(self.count)".data(using: .utf8)!
if self.count < 1000 {
self.send(data: newData)
}
print("connection \(self.id) did send, data: \(newData as NSData)")
}))
}
客户端正在接收它们……
private func setupReceive() {
nwConnection.receive(minimumIncompleteLength: 1, maximumLength: 65536) { (data, contentContext, isComplete, error) in
if let data = data, !data.isEmpty {
print("isComplete: \(isComplete)")
print("isFinal: \(contentContext.isFinal)")
let message = String(data: data, encoding: .utf8)
print("connection did receive, data: \(data as NSData) string: \(message ?? "-" )")
}
if let error = error {
self.connectionDidFail(error: error)
} else {
self.setupReceive()
}
}
}
...但是有些地方出了问题。一些消息看起来像它们的字节黏在一起(例如连续的消息“2”,“3”,“4”,“5”可能被接收成一个单一的消息“2345”)
对于所有接收到的消息,isComplete等于false,contentContext属性isFinal等于true,而.defaultMessage.isFinal应该等于false。
目前,我卡住了。我的参数使用错误了吗(我尝试了各种组合,但似乎没有一个有效的)?NWConnection是否在发送消息时丑陋地改变了它们?
如何发送一系列独立的消息?