Вопрос о Socket Streams на iPhone - PullRequest
0 голосов
/ 28 марта 2009

Я хочу отправить UIImage на сервер с сокетом. Я использую этот код из АЦП:


- (IBAction)searchForSite:(id)sender

{

    NSString *urlStr = [sender stringValue];

    if (![urlStr isEqualToString:@""]) {

        [searchField setEnabled:NO];

        NSURL *website = [NSURL URLWithString:urlStr];

        if (!website) {

            NSLog(@"%@ is not a valid URL");

            return;

        }

        NSHost *host = [NSHost hostWithName:[website host]];

        // oStream is instance variable

        [NSStream getStreamsToHost:host port:80 inputStream:nil
            outputStream:&oStream];

        [oStream retain];

        [oStream setDelegate:self];

        [oStream scheduleInRunLoop:[NSRunLoop currentRunLoop]

            forMode:NSDefaultRunLoopMode];

        [oStream open];

    }

}

Первый вопрос: я хочу создать объект NSOutputStream, но обнаружил, что его можно инициализировать только с помощью файла, буфера или памяти. Как я могу вывести поток в сокет?

Второй вопрос: ссылка на АЦП говорит нам, что метод getStreamsToHost: port: inputStream: outputStream: возвращает объект, представляющий поток вывода, на удаленный хост. Как хост может вернуть себе выходной поток? И куда можно добавить выходной поток в код для отправки на хост

1 Ответ

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

Первый вопрос :

Вы уже инициализируете его с сокетом . Сообщение getStreamsToHost от NSStream уже дает вам сокет для общения с указанным хостом post. Всякий раз, когда вы хотите записать в сокет, просто используйте oStream .

Второй вопрос :

Вид ответа в первом вопросе. Имейте в виду, что вы открываете сокет для порта 80 . Итак, вероятно, вы запускаете WebServer на удаленном хосте. И чтобы иметь возможность отправлять изображение на удаленный сервер, вам необходимо реализовать протокол HTTP . Проверьте мое предложение ниже. Я думаю, что это сделает вашу жизнь проще.


Небольшое предложение:

Я знаю, что вы не спрашивали об этом, но позвольте мне дать вам предложение. Вы пытаетесь отправить изображение через сокет. Я бы использовал протокол более высокого уровня, такой как HTTP или FTP , чтобы сделать это. Использование простого сокета заставит вас самостоятельно реализовать новый протокол, не говоря уже о коде на стороне сервера для обработки входящих изображений.

Итак, если вы используете HTTP , просто напишите небольшой серверный скрипт на вашей любимой веб-платформе разработки (.NET, PHP, Java, Python, RoR, CGI и т. Д.) И просто используйте рекомендации по это веб-страница для отправки изображения на iPhone. Это намного проще.

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