iPhone 5s和iPhone 6(tcp)之间的区别

时间:2019-03-20 02:36:06

标签: ios iphone tcp inputstream handler

TCP connection中的iPhone 5s和iPhone 6之间有区别吗? 我在5s和6中运行了相同的tcp代码,在6s中运行正常,但是5s在获取数据时突然停止。 当代码运行停止时,事件处理程序也不起作用。 两台设备上的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 :(得分:0)

我不知道为什么5s和6之间有区别。

但是我通过设置套接字接收缓冲区大小来解决此问题。