ios7 – 使用Multipeer Connectivity框架进行缓慢的文件传输

前端之家收集整理的这篇文章主要介绍了ios7 – 使用Multipeer Connectivity框架进行缓慢的文件传输前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用iOS 7的Multiper Connectivity Framework在两台设备之间发送文件.我正在使用NSStreams来传输文件,就像我之前尝试使用MCSession的sendData:toPeers:withMode真的不可靠.不幸的是,我得到的传输速度真的很慢,大约100kb / s,这对于我正在开发的应用程序来说是不行的.这是我的输入和输出流委托方法,这是文件传输发生的地方.

输出流(在流的代表中)

...//prevIoUs code
 case NSStreamEventHasSpaceAvailable: {
            //we will only open the stream when we want to send the file.

            NSLog(@"Stream has space available");
            //[self updateStatus:@"Sending"];

            // If we don't have any data buffered,go read the next chunk of data.

            if (totalBytesWritten< outgoingDataBuffer.length) {
                //more stuff to read
                int towrite;
                int diff = outgoingDataBuffer.length-packetSize;
                if (diff <= totalBytesWritten)
                {
                    towrite = outgoingDataBuffer.length - totalBytesWritten;
                } else
                    towrite = packetSize;
                NSRange byteRange = {totalBytesWritten,towrite};
                uint8_t buffer[towrite];
                [outgoingDataBuffer getBytes:buffer range:byteRange];


                NSInteger bytesWritten = [outputStream write:buffer maxLength:towrite];
                totalBytesWritten += bytesWritten;
                NSLog(@"Written %d out of %d bytes",totalBytesWritten,outgoingDataBuffer.length);
            } else {
                //we've written all we can write about the topic?
                NSLog(@"Written %d out of %d bytes",outgoingDataBuffer.length);
                [self endStream];
            }

            // If we're not out of data completely,send the next chunk.
        } break;

输入流

- (void)stream:(NSStream *)stream handleEvent:(NSStreamEvent)eventCode {

    switch(eventCode) {
        case NSStreamEventHasBytesAvailable:
        {
            NSLog(@"Bytes Available");
            //Sent when the input stream has bytes to read,we need to read bytes or else this wont be called again
            //when this happens... we want to read as many bytes as we can

            uint8_t buffer[1024];
            int bytesRead;

            bytesRead = [inputStream read:buffer maxLength:sizeof(buffer)];
            [incomingDataBuffer appendBytes:&buffer length:bytesRead];
            totalBytesRead += bytesRead;
            NSLog(@"Read %d bytes,total read bytes: %d",bytesRead,totalBytesRead);

        }break;
        case NSStreamEventEndEncountered:
        {
            UIImage *newImage = [[UIImage alloc]initWithData:incomingDataBuffer];
            [[self.detailViewController imageView] setImage:newImage];
            NSLog(@"End Encountered");

            [self closeStream];
            //this should get called when there aren't any more bytes being sent down the stream
        }
    }
 }

有没有办法通过多线程或使用稍微修改的NSStream子类来加速此文件传输,这些子类使用异步套接字?

解决方法

有几件事我注意到导致缓慢的文件传输:

>在会话中使用非空投兼容设备(http://en.wikipedia.org/wiki/AirDrop)
> WiFi问题(饱和网络,路由器问题,频道等)

iPhone上的iPhone 5S,iPad Air和iPhone模拟器之间的速度(以及体面的意思是500K /秒).

猜你在找的iOS相关文章