Как перенести большие файлы через Wi-Fi в iOS

Я загрузилWiTap Код с сайта Apple. Это для передачи данных по локальной сети Wi-Fi. Я работаю в проекте, чтобы взаимодействовать как клиент-серверная архитектура. Я отправляю NSData со стороны клиента на сервер.

Я сделал 2 проекта; один для клиента и один для сервера

В проекте на стороне клиента я сделал следующие изменения. Для этого я изменилAppController.m файл, добавив следующий метод

AppController.m (Сторона клиента)

- (void)sendData:(NSData*)pobjData
{
    assert(self.streamOpenCount == 2);

    if ( [self.outputStream hasSpaceAvailable] ) 
    {
        NSInteger   bytesWritten;

        NSUInteger length = [pobjData length];

        bytesWritten = [self.outputStream write:[pobjData bytes] maxLength:[pobjData length]];

        NSLog(@"written bytes -> %d",bytesWritten);
    }
}

Затем, вызывая этот метод, я отправляю данные.

В проекте на стороне сервера я сделал следующие ошибки для этого я изменил файл AppController.m, изменив следующий метод

AppController.m (Сторона сервера)

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

    switch(eventCode) {

        case NSStreamEventOpenCompleted: {
            self.streamOpenCount += 1;
            assert(self.streamOpenCount <= 2);

            // Once both streams are open we hide the picker and the game is on.

            if (self.streamOpenCount == 2) {
                [self dismissPicker];

                [self.server deregister];
            }
        } break;

        case NSStreamEventHasSpaceAvailable: {
            assert(stream == self.outputStream);
            // do nothing
        } break;

        case NSStreamEventHasBytesAvailable:
        {
            if (stream == self.inputStream)
            {

                NSInteger bytesRead;
                uint32_t buffer[32768];

                NSMutableData *_data = [NSMutableData data];

                // Pull some data off the network.
                bytesRead = [self.inputStream read:buffer maxLength:sizeof(buffer)];
                if (bytesRead == -1) {

                } else if (bytesRead == 0) {

                } else {
                    // FIXME: Popup an alert

                    const long long expectedContentLength = bytesRead;
                    NSUInteger expectedSize = 0;

                    // expectedContentLength can be represented as NSUInteger, so cast it:
                    expectedSize = (NSUInteger)expectedContentLength;

                    [_data appendBytes:buffer length:expectedSize];

                    NSLog(@"\"Data received has length: %d", _data.length);

                    [self performSelector:@selector(getData:) withObject:_data afterDelay:1.0];
                }
            }
        }
            break;

        default:
            assert(NO);
            // fall through
        case NSStreamEventErrorOccurred:
            // fall through
        case NSStreamEventEndEncountered: {
            [self setupForNewGame];
        } break;
    }
}

и добавил метод для записи полученных данных в виде файла

     #define kUserDirectoryPath NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)

-(void)getData:(NSMutableData *)pData
{
                NSFileManager *tmpmanager = [NSFileManager defaultManager];
                [tmpmanager createFileAtPath:[AppController getDocumentDirectoryPath:[NSString stringWithFormat:@"%@.png",[NSDate date]]] contents:pData attributes:nil];
}


+(NSString*)getDocumentDirectoryPath:(NSString*)pStrPathName
{
            NSString *strPath=nil;

            if(pStrPathName)
                strPath = [[kUserDirectoryPath objectAtIndex:0] stringByAppendingPathComponent:pStrPathName];

            return strPath;
}

Я конвертирую .png файлы в NSData и отправляю их со стороны клиента на сторону сервера. сервер загружает файл в каталог документов

Дело в том, что когда я передаю файл со стороны клиента, он загружается на сервер в каталоге документов. Все отлично работает в случае крошечных файлов. Если размер файла превышает 8 КБ, файл, записанный в каталоге документов, будет поврежден.

Пожалуйста, помогите мне иметь возможность отправлять большие файлы.

Ответы на вопрос(3)

Ваш ответ на вопрос