Как добавить данные для NSOutputStream? - PullRequest
1 голос
/ 29 марта 2009

Я хочу преобразовать UIImage в NSOutputStream и отправить его на сервер через сокет.


#import "Connection.h"

@implementation Connection

-(void) open: (NSString *) h : (int) p
{
    strHost = h;
    intPort = p;

    [NSStream getStreamsToHost:objHost
                port:intPort
            inputStream:&receiveStream
            outputStream:&sendStream];

    [receiveStream retain];
    [sendStream retain];

    [receiveStream setDelegate:self];
    [sendStream setDelegate:self];

    [receiveStream scheduleInRunLoop:[NSRunLoop currentRunLoop]                 forMode:NSDefaultRunLoopMode];
    [sendStream scheduleInRunLoop:[NSRunLoop currentRunLoop]                forMode:NSDefaultRunLoopMode];

    [receiveStream open];
    [sendStream open];

    printf("Open.\n");
}


- (void) stream: (NSStream *) stream handleEvent: (NSStreamEvent) eventCode
{
    printf("EVENT: Start.\n");

    switch(eventCode)
    {
        case NSStreamEventOpenCompleted:
        {
            printf("EVENT: Open completed.\n");

            if(stream == receiveStream)
            {
                printf("Receiving...\n");
            }

            if(stream == sendStream)
            {
                printf("Sending...\n");

                NSString * strBuffer = [NSString stringWithFormat:@"GET / HTTP/1.0\r\n\r\n"];
                const uint8_t * rawstring = (const uint8_t *)[strBuffer UTF8String];

                [sendStream write:rawstring maxLength:strlen(rawstring)];
            }

            break;
        }
        case NSStreamEventEndEncountered:
        {
            printf("EVENT: End encountered.\n");
            break;
        }
        case NSStreamEventHasSpaceAvailable:
        {
            printf("EVENT: Has space available.\n");
            break;
        }
        case NSStreamEventHasBytesAvailable:
        {
            printf("EVENT: Has bytes available.\n");
            break;
        }
        case NSStreamEventErrorOccurred:
        {
            printf("EVENT: Error occurred.\n");
            break;
        }
        case NSStreamEventNone:
        {
            printf("EVENT: None.\n");
            break;
        }
    }

    printf("EVENT: End.\n");
}

-(void) close
{
    [receiveStream close];
    [sendStream close];

    printf("Closed.\n");
}

@end


У меня вопрос, где я могу добавить код вроде "sendStream = ..."?

Другой вопрос заключается в том, что я могу конвертировать UIImage в NSData, используя:

NSData *imageData = UIImageJPEGRepresentation(imageView.image, 90);

Но как преобразовать imageData в экземпляр NSOutputStream?

1 Ответ

2 голосов
/ 29 марта 2009

У меня вопрос, где я могу добавить код вроде "sendStream = ..."?

Вы уже присваиваете sendStream с сообщением getStreamsToHost:port:inputStream:outputStream:. Этот метод возвращает два потока по ссылке.

… как преобразовать imageData в экземпляр NSOutputStream?

Вам не нужно преобразовывать данные в поток, вам нужно указать потоку для записи данных.

Попробуйте NSOutputStream's write:maxLength: метод . Вам нужно будет передать байты и длину из объекта данных.

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