CocoaEcho sample auf iPhone

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • CocoaEcho sample auf iPhone

    Hallo,

    ich versuche gerade, basierend auf dem CocoaEcho sample von Apple eine Datenübertragung vom iPhone zu meinem Mac aufzubauen. Den CocoaEcho Server habe ich dazu 1:1 in eine iPhone-Applikation integriert, starte den Server aber nicht in main() wie im Sample-Code, sondern durch drücken eines Buttons. Die einzige Änderung, die ich vornehmen musste, bezog sich auf das importieren von <CoreServices/CoreServices.h>, dass nur im Simulator funktioniert. Für das Device muss ich <CFNetwork/CFNetwork.h> benutzen.

    Frage 1: Gibt es eine Möglichkeit, dass so in Code zu fassen, dass automatisch, wenn ich für das Device kompilere <CFNetwork/CFNetwork.h> genutzt wird und ansonsten <CoreServices/CoreServices.h>?

    Frage 2: Im Simulator läuft das ganze, der Server startet und lässt sich fehlerfrei stoppen. Auf dem Device kommt allerdings immer die Fehlermeldung:

    Error Domain=TCPServerErrorDomain Code=3 "Operation could not be completed. (TCPServerErrorDomain error 3.)"

    Es wäre toll, wenn mir jemand auf die Sprünge helfen kann, in der Apple Dokumentation bin ich nicht weiter gekommen, da stand nur etwas von conditionally link frameworks, was nichts gebracht hat.

    Danke
    Jens
  • Hallo,

    kleine Info noch dazu: habe zum Testen einen Breakpoint auf Zeile 9 gesetzt. Das ist Code aus der Server-Applikation, die auf dem iPhone läuft und stammt aus der start:-Methode, die den Server anwirft. Er hält an, was meiner Meinung nach bedeutet, dass er keinen Socket erhält. Woran könnte das liegen?

    Quellcode

    1. CFSocketContext socketCtxt = {0, self, NULL, NULL, NULL};
    2. ipv4socket = CFSocketCreate(kCFAllocatorDefault, PF_INET, SOCK_STREAM, IPPROTO_TCP, kCFSocketAcceptCallBack, (CFSocketCallBack)&TCPServerViewControllerAcceptCallBack, &socketCtxt);
    3. ipv6socket = CFSocketCreate(kCFAllocatorDefault, PF_INET6, SOCK_STREAM, IPPROTO_TCP, kCFSocketAcceptCallBack, (CFSocketCallBack)&TCPServerViewControllerAcceptCallBack, &socketCtxt);
    4. if(NULL == ipv4socket || NULL == ipv6socket)
    5. {
    6. if(error)
    7. *error = [[NSError alloc] initWithDomain:TCPServerViewControllerErrorDomain code:kTCPServerViewControllerNoSocketsAvailable userInfo:nil];
    Jens
  • RE: CocoaEcho sample auf iPhone

    Original von pocahontius
    Frage 1: Gibt es eine Möglichkeit, dass so in Code zu fassen, dass automatisch, wenn ich für das Device kompilere <CFNetwork/CFNetwork.h> genutzt wird und ansonsten <CoreServices/CoreServices.h>


    Zur Compilezeit kannst Du das einfach mit dem Präprozessor machen und entsprechend das passende Include-File importieren. Beim Linken kann man recht einfach angeben, dass man im Simulator gegen ein anderes Framework linken möchte wie im Device. Kann man mit "Add build setting condition" recht einfach machen.

    ciao

    gandhi
  • RE: CocoaEcho sample auf iPhone

    Bezüglich iPhone <-> Mac Datenübertragung empfehle ich einen Blick auf iMBiPhoneView.
    Es handelt sich um ein Open Source Projekt, das genau zu diesem Zweck entwickelt wurde.
    Das Projekt besteht auf der Mac Seite aus einem Plug-in für den (ebenfalls als Open Source veröffentlichten) iMedia Browser und einem "Framework" zum Einbau in Programme auf dem iPhone.
    Das Projekt enthält auch Beispielprogramme (für Mac und iPhone).

    Selbst falls das Projekt selbst nicht das Richtige für dich ist, könnte die darin enthaltene funktionierende Implementation der TCP/IP-Verbindung vielleicht weiterhelfen.

    Die Projekt-Homepage (mit Beispielfilmen und Links zum svn-Archiv) ist hier zu finden:

    pleasantsoftware.com/developer/iMBiPhoneView/

    Viele Grüße
    Eberhard
    Bevor man jemanden kritisiert, sollte man zuerst ein paar Meilen in dessen Schuhen gehen!
    Erstens ist man dann in sicherem Abstand und zweitens hat man die Schuhe...