0
以下代码在与许多设备连接时很有用。但试图连接到要求输入用户名和密码的设备时,它不会。具有身份验证的Swift Telnet流
当通过telnet连接腻子时,思科SX 80等设备在连接后返回登录:提示。
但是当使用下面的代码时,会发生OpenCompleted事件,然后发生HasBytesAvaialable,但缓冲区为空。
将socketSecurityLevel设置为其他任何内容会引发错误,因为它是普通的telnet,而不是SSL。
关于我失踪的任何想法?
func openTcpStream(){
if !tcpHost.isEmpty{
Stream.getStreamsToHost(withName: tcpHost, port: tcpPort, inputStream: &inputStream, outputStream: &outputStream)
if inputStream != nil{
let input: InputStream = inputStream!
input.delegate = self
input.schedule(in: RunLoop.current, forMode: RunLoopMode.defaultRunLoopMode)
self.inputStream!.setProperty(StreamSocketSecurityLevel.none, forKey: Stream.PropertyKey.socketSecurityLevelKey)
input.open()
}
if outputStream != nil{
let output: OutputStream = outputStream!
output.delegate = self
output.schedule(in: RunLoop.current, forMode: RunLoopMode.defaultRunLoopMode)
self.outputStream!.setProperty(StreamSocketSecurityLevel.none, forKey: Stream.PropertyKey.socketSecurityLevelKey)
output.open()
}
}
}
func stream(_ aStream: Stream, handle eventCode: Stream.Event) {
var event = ""
switch eventCode {
case Stream.Event.openCompleted:
if writeQueue != ""{
writeTcpStream(bufferToWrite: writeQueue)
}
case Stream.Event.hasBytesAvailable:
if inputStream != nil{
readTcpStream(inputStream: inputStream)
}
default:()
}
}
func readTcpStream(inputStream: InputStream?){
if inputStream != nil{
let input = inputStream!
var readBuffer: NSString = ""
var readByte = [UInt8](repeating:0, count: 512)
while input.hasBytesAvailable{
input.read(&readByte, maxLength: readByte.count)
let tempString = NSString(bytes: readByte, length: readByte.count, encoding: String.Encoding.utf8.rawValue)
if tempString?.length != nil{
readBuffer = (readBuffer as String) + (tempString! as String) as NSString
}
}
}
}