2009-03-28 4 views
0

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


- (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, но я считаю, что это может быть initilized только с файлом, буфер, или в памяти. Как я могу вывести поток в сокет?

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

ответ

2

Первого вопросом:

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

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

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


Немного предложение:

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

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

+0

Когда я могу добавить данные UIImage в oStream? После [oStream open] или до 'getStreamToHost'? –

+1

Это должно быть после. Но помните, что если вы отправляете его на порт 80, вы, вероятно, отправляете его на веб-сервер. Таким образом, вам придется реализовать протокол HTTP самостоятельно. Пожалуйста, внимательно прочитайте мой ответ. Вы сможете передать свое изображение, если будете следовать моим предложениям. –

+0

Для моего собственного приложения используется порт 1100. И он разделяет тот же сервер с окном мобильного приложения. Поэтому мне не позволено изменять протокол. Спасибо за ваш ответ и предложение в любом случае. –