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;
答案 0 :(得分:0)
我不知道为什么5s和6之间有区别。
但是我通过设置套接字接收缓冲区大小来解决此问题。