0
次のコードは、TCPを使用して多数のデバイスに接続する場合に有効です。しかし、ユーザー名とパスワードを要求するデバイスに接続しようとしても、そうではありません。認証付きスウィフトTelnetストリーム
telnet経由で接続する場合、Cisco SX 80のようなデバイスは、接続後にlogin:プロンプトを返します。
ただし、次のコードを使用すると、OpenCompletedイベントが発生し、HasBytesAvaialableが発生しますが、バッファは空です。
socketSecurityLevelを何かに設定すると、SSLではなく単純なtelnetであるため、エラーが発生します。
私が紛失していることに関するアイデアはありますか?
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
}
}
}
}