TL; DR:
NSStream.getStreamsToHostWithName(...)
arandığında uzak akışımın doğru şekilde açılıp açılmadığını kontrol etmenin yolu nedir?Uzak soketim NSStream'inin doğru şekilde açık olup olmadığını sınama
Uygulamam, mobil bir IOS8 hızlı uygulamasıdır.
Uzak sunucuyla giriş ve çıkış soketi iletişimi için NSStream kullanıyorum.
benim sunucusuna bağlanmak ve bu kodu kullanabilirsiniz benim akışı açmak için:func connect(host: String, port: Int) -> Bool
{
//clear the previous connection if existing (and update self.connected)
disconnect()
//updating the current connection
self.host = host
self.port = port
//pairing NSstreams with remote connection
NSStream.getStreamsToHostWithName(self.host!, port: self.port!, inputStream: &inputStream, outputStream: &outputStream)
if (self.inputStream != nil && self.outputStream != nil)
{
//open streams
self.inputStream?.open()
self.outputStream?.open()
}
if self.outputStream?.streamError == nil && self.inputStream?.streamError == nil
{
println("SOK") //PROBLEM 1
}
//error checking after opening streams // PROBLEM 2
if var inputStreamErr: CFError = CFReadStreamCopyError(self.inputStream)?
{
println("InputStream error : " + CFErrorCopyDescription(inputStreamErr))
}
else if var outputStreamErr: CFError = CFWriteStreamCopyError(self.outputStream)?
{
println("OutStream error : " + CFErrorCopyDescription(outputStreamErr))
}
else
{
//set the delegate to self
self.inputStream?.delegate = self
self.outputStream?.delegate = self
self.connected = true
}
//return connection state
return self.connected
}
Benim sorunum // PROBLEM1 ve // problemi 2 yer almaktadır.
Bu noktalarda, yuvalarımın doğru şekilde açılıp açılmadığını belirlemeye çalışırım, ancak sunucu çalışmıyorsa bile bu kod hala çalışıyorsa, okuma ve yazma işlemleri başarısız oluyor. Bağlantı başarısız olup olmadığını belirlemek istiyorum.
Belki de tamamen yanlış yapıyorum, bunu nasıl test edemiyorum.
inputStream!.scheduleInRunLoop(.mainRunLoop(), forMode: NSDefaultRunLoopMode)
outputStream!.scheduleInRunLoop(.mainRunLoop(), forMode: NSDefaultRunLoopMode)
Ve kodunuzda, bu hatayı kontrol etmek Çok erken: Herşeyden
teşekkür ederiz. Sadece bazı sorularım var. Öncelikle, zamanlama bölümünü yapmak akışlarımı uyumsuzlaştırıyor mu? Operasyonumun senkronize olmasını istiyorum. –
Anlayışımla, akışın kendisi her zaman engellenmiyor. Senkronize çalışmanız gerekiyorsa, 'true (...}') döngüsüyle '' polling '' kullanmanız gerekir. bakın: https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/Streams/Articles/PollingVersusRunloop.html – rintaro
Akış engelleniyor, NSInputStream.read() işlemi varsayılan olarak engelleniyor –