Разница между iphone 5s и iphone 6 (tcp) - PullRequest
0 голосов
/ 20 марта 2019

Есть ли разница между iPhone 5s и iPhone 6 в TCP connection? Я запустил один и тот же код tcp в 5 и 6, а в 6 работает нормально, но 5-ые внезапно прекращаются при получении данных. Когда код запускается, обработчик событий не работает. Версия iOS на двух устройствах одинакова с 12.1.4.

код инициализации

CFStreamCreatePairWithSocketToHost(kCFAllocatorDefault,
                                   (__bridge CFStringRef) serverip,
                                    serverport,
                                    & _readStream,
                                    & _writeStream);

 self.inputStream = (__bridge NSInputStream *)self.readStream;
 [self.inputStream setDelegate:self];
 [self.inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];

 self.outputStream = (__bridge NSOutputStream *)self.writeStream;
 [self.outputStream setDelegate:self];
 [self.outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];

 [self.inputStream open];
 [self.outputStream open];

код обработчика события

else if(eventCode == NSStreamEventHasBytesAvailable)
{
    if([aStream isEqual: self.inputStream])
    {
        NSInteger len = 0;
        uint8_t buf[4096];
        len = [self.inputStream read:buf maxLength:4096];

        if(len > 0)
        {
            NSMutableData* data = [[NSMutableData alloc] initWithLength:0];
            [data appendBytes: (const void *)buf length:len];
            [file_handler writeData:data];

            len_read = len_read + (int)len;

            if(len_read >= file_length) // download complete
            {
                @synchronized (self)
                {
                    [self.inputStream close];
                    [self.inputStream removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];
                    [self.inputStream setDelegate:nil];
                    self.inputStream = nil;

                    [self.outputStream close];
                    [self.outputStream removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];
                    [self.outputStream setDelegate:nil];
                    self.outputStream = nil;

1 Ответ

0 голосов
/ 21 марта 2019

Я пока не знаю, почему он имеет разницу между 5 с и 6.

Но я решаю эту проблему, устанавливая размер буфера приема сокета.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...