Решение для людей, следующих по способу подключения:
CFStreamCreatePairWithSocketToHost(kCFAllocatorDefault,
(CFStringRef) urlStr,
portNo,
&readStream,
&writeStream);
if (readStream && writeStream)
{
CFReadStreamSetProperty(readStream,
kCFStreamPropertyShouldCloseNativeSocket,
kCFBooleanTrue);
CFWriteStreamSetProperty(writeStream,
kCFStreamPropertyShouldCloseNativeSocket,
kCFBooleanTrue);
iStream = (NSInputStream *)readStream;
[iStream retain];
[iStream setDelegate:self];
[iStream scheduleInRunLoop:[NSRunLoop currentRunLoop]
forMode:NSDefaultRunLoopMode];
[iStream open];
oStream = (NSOutputStream *)writeStream;
[oStream retain];
[oStream setDelegate:self];
[oStream scheduleInRunLoop:[NSRunLoop currentRunLoop]
forMode:NSDefaultRunLoopMode];
[oStream open];
}
использует
-(void)stream:(NSStream *)theStream handleEvent:(NSStreamEvent)streamEvent
как это:
* * 1010
(все, что я знаю!) Авторы из этого поста отправляют *1012* декса * (хотя я не знаю, кто был создателем, потому что я видел это несколько раз) в сети, в том числе и здесь О ТАК). Этот код был немного изменен мной (pingButton, statusText), если вы хотите, чтобы оригинальный код шел по ранее упомянутой ссылке.
На сайте Apple для разработчиков также есть некоторая информация.
Как я уже говорил, я видел в Интернете кое-что похожее на это, но теперь я понимаю, что все, что происходит после подключения, происходит «автоматически»; например, если сервер находится в режиме ожидания с read()
, case NSStreamEventHasSpaceAvailable:
будет вызван автоматически, и весь код там будет запущен.
Теперь я считаю этот вопрос ответом.