2009-03-28 8 views
0

Ich möchte ein UIImage an einen Server mit Socket senden. Ich verwende diesen Code von ADC:Frage zu Socket Streams auf dem 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]; 

    } 

} 

Erste Frage: Ich möchte ein NSOutputStream-Objekt erstellen, aber ich finde, dass es nur mit einer Datei, einem Puffer oder Speicher initilized werden kann. Wie kann ich den Stream dann an einen Socket ausgeben? Die zweite Frage: Die ADC-Referenz besagt, dass die Methode getStreamsToHost: port: inputStream: outputStream: das Objekt zurückgibt, das einen Ausgabestream für den entfernten Host darstellt. Wie kann der Host den Ausgabestream an sich selbst zurückgeben? Und wo kann ich Ausgangsstrom im Code hinzufügen zu dem Host

Antwort

2

Erste Frage senden:

Sie sind bereits mit einem Buchse initialisiert. NSStreams getStreamsToHost-Nachricht gibt Ihnen bereits einen Socket, um mit dem angegebenen Host-Post zu kommunizieren. Wenn Sie in den Socket schreiben möchten, verwenden Sie einfach oStream.

Zweite Frage:

Art der in der ersten Frage beantwortet. Beachten Sie, dass Sie einen Socket zu Port öffnen. Wahrscheinlich führen Sie also einen WebServer auf dem Remote-Host aus. Um ein Image an den Remote-Server senden zu können, müssen Sie das Protokoll HTTP implementieren. Überprüfen Sie meinen Vorschlag unten. Ich denke, es wird dir das Leben leichter machen.


Ein kleiner Vorschlag:

Ich weiß, dass Sie dies nicht fragen, aber lassen Sie mich Ihnen einen Vorschlag. Sie versuchen, ein Bild über einen Socket zu senden. Ich würde ein höheres Protokoll wie HTTP oder FTP verwenden, um dies zu tun. Wenn Sie einen einfachen Socket verwenden, müssen Sie selbst ein neues Protokoll implementieren, ganz zu schweigen vom serverseitigen Code zur Verarbeitung eingehender Bilder.

Also, wenn Sie HTTP verwenden, schreiben Sie einfach eine wenig Server-Seite Skript in Ihrer bevorzugten Web-Entwicklungsplattform (.NET, PHP, Java, Python, RoR, CGI, was auch immer) und nur verwenden Leitlinien für this Webseite Sende das Bild auf das iPhone. Es ist viel einfacher.

+0

Wann kann ich dem OStream UIImage-Daten hinzufügen? Nach [oStream open] oder vor 'getStreamToHost'? –

+1

Es ist danach. Aber denken Sie daran, wenn Sie es an den Port 80 senden, senden Sie es wahrscheinlich an einen Webserver. Sie müssen also das HTTP-Protokoll selbst implementieren. Bitte lies meine Antwort sorgfältig durch. Sie können Ihr Bild übertragen, wenn Sie meinen Vorschlägen folgen. –

+0

Für meine eigene App wird Port 1100 verwendet. Und es teilt den gleichen Server mit einer Windows Mobile App. Also werde ich das Protokoll nicht ändern dürfen. Danke für deine Antwort und deinen Vorschlag. –