Ios Swift NSStream发送多个distincts命令

Ios Swift NSStream发送多个distincts命令,ios,swift,send,nsstream,Ios,Swift,Send,Nsstream,我需要从我的家庭自动化服务器获取设备列表的状态。我要查询的设备位于数组中 我将triyng循环通过该阵列,并且对于每个设备,我将发送到服务器。我的问题是服务器只接收到一个包含我的3个命令的字符串 循环发送这3个命令: gs,6297\r\n gs,5867\r\n gs,9737\r\n 我在很多地方读到,我只需要附加一个回车行提要来解决我的问题,但它不起作用 我用Wireshark分析了发生的事情。这3个命令作为一个大字符串发送: gs,6297..gs,5867..gs,9737 在哪里。。

我需要从我的家庭自动化服务器获取设备列表的状态。我要查询的设备位于数组中

我将triyng循环通过该阵列,并且对于每个设备,我将发送到服务器。我的问题是服务器只接收到一个包含我的3个命令的字符串

循环发送这3个命令:

gs,6297\r\n

gs,5867\r\n

gs,9737\r\n

我在很多地方读到,我只需要附加一个回车行提要来解决我的问题,但它不起作用

我用Wireshark分析了发生的事情。这3个命令作为一个大字符串发送:

gs,6297..gs,5867..gs,9737

在哪里。。是0d 0a

我已经使用运行循环方式实现了许多地方看到的NSStream:

outputStream!.scheduleInRunLoop(NSRunLoop.currentRunLoop(), forMode: NSDefaultRunLoopMode)
这是我的发送功能:

func send(message:String){
    if (self.outputStream!.hasSpaceAvailable){
        let data:NSData = message.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!
        let bytesWritten = self.outputStream!.write(UnsafePointer(data.bytes), maxLength: data.length)

        println("> \(message) | Length: \(data.length)")
    } else {
        println("# stream busy")
    }
}
和我的查询循环:

func GetDeviceStatus(array: [sDevice]){
    for (index, value) in enumerate(array) {
        while (true) {
            if (self.outputStream!.hasSpaceAvailable){
                self.send("gs,\(value.DevRef)\r\n")
                sleep(1)
                break
            }
        }
    }
}
也许,这个循环太快了。如果我取消对sleep1的注释,服务器将收到3条命令,Read函数将收到3条distincts响应。一切正常。但加上睡眠功能是阻塞和缓慢的


有人能帮忙吗?我在这个问题上花了很多时间。

您的问题是您认为TCP保留了消息边界,但事实并非如此。TCP连接是字节流,而不是消息流。您的服务器不能假定它会将每个命令作为单独的消息读取。相反,它需要查看它读取的字节,并在边界上分解字节。

谢谢您的回答。问题是它不是我的服务器。我需要向公司解决这个问题。你确定问题出在服务器上吗?或者是因为您的响应读取代码无法处理在一次读取中获得多个响应的问题?对不起,我说英语,我说法语。我的意思是,服务器不是我的。服务器回答为“错误,格式错误”。这就是为什么我认为服务器不能同时接收这3条命令的原因。我是iOS编程和TCP的新手。