我正在尝试构建一个与我网络上的TCP服务器通信的应用程序。
我使用的代码是:
let addr = "192.168.1.104"
let port = 101010
var inp: NSInputStream?
var out: NSOutputStream?
@IBAction func Connect_Button(sender: AnyObject) {
NSStream.getStreamsToHostWithName(addr, port: port, inputStream: &inp, outputStream: &out)
let inputStream = inp!
let outputStream = out!
inputStream.open()
outputStream.open()
var buffer: [UInt8] = [92,72,69,76,76,79,49,50,51,33,47] //"\Hello123!/" in ASCII - hardcoded to test.
outputStream.write(&buffer, maxLength: buffer.count)
let bufferSize = 1024
var inputBuffer = Array<UInt8>(count:bufferSize, repeatedValue: 0)
let bytesRead = inputStream.read(&inputBuffer, maxLength: bufferSize)
//encode as string and print
var readByte :UInt8 = 0
Current_Text.text = ""
while inputStream.hasBytesAvailable {
Current_Text.text? += String(inputStream.read(&inputBuffer, maxLength: 1))
}
}
我不会将链接放入,以防它违反任何规则。但它来自Reddit帖子。
问题1)当我按下我的UIButton来触发通信时,它几乎一直都会失败。在10次测试中,我获得3次成功传输,7次&#34;挂起&#34;。不确定是什么导致这些&#34;挂起&#34;在沟通,但它要求我退出应用程序并重新运行。
问题2)我的服务器返回的字符串(&#34; OK&#34;,&#34; ERROR&#34; ...)不是我的服务器读取的代码。我认为这是由于我缺乏知识。我还在阅读它是如何工作的。
问题3)我需要这个通信代码来执行不同的程序线程,因为一切都在执行时停止。这段代码可以在dispatch_async上运行吗?目前我直接测试IBAction中的代码,但我打算将它放在一个类/函数(单独的swift文件)中,然后返回数据。