2010-11-24 3 views
1

Was wäre der effektivste Weg (das beste Verhältnis von Aufwand zu Lesbarkeit und Wartbarkeit), um eine TCP-Verbindung herzustellen oder UDP-Datagramme auf Mac und iPhone zu senden? Ich bin sehr vertraut mit klassischen BSD-Sockets, aber ich bin nicht auf Portabilität im Moment; Ich versuche nur, schnell mit einem kleinen Projekt fertig zu werden.Der effektivste Weg, Netzwerk auf Mac/iPhone zu tun?

Ich hätte gerne einen von Apple bereitgestellten Objective-C-Wrapper, aber ich würde gerne einige Gedanken darüber hören, was die Leute normalerweise machen. Wenn Sie denken, BSD-Sockets sind der Weg zu gehen, fühlen Sie sich frei, um einige Gedanken auch: Ich bin wirklich nur daran interessiert, den "richtigen Weg", um es zu tun.

Lassen Sie sich das Protokoll vermutet ein Brauch zu sein, so dass unsere Bedürfnisse nicht durch die Cocoa-basierten HTTP-Client-Klassen gewartet werden :)


Mein aktuelles Ziel ist es Gerätestatus zu streamen (zB Beschleunigungsmesser) über das Netzwerk über UDP, wobei auch die Signalisierung und die Übermittlung des garantierten Ereignisses (z. B. Taste gedrückt) über TCP aufrechterhalten werden. Eine Desktop-Anwendung würde diesen Status anzeigen.

Allerdings ist meine aktuelle Anwendung genau das, was mich dazu gebracht hat, die Frage zu stellen; Ich frage mich, was die Leute normalerweise machen. Als ich vor ca. 7 - 8 Jahren mit VB6 ernsthaft gearbeitet habe, hat WinSock ActiveX Control etwas anders gemacht als was mit BSD Sockets gemacht wurde, egal was es unter der Haube tat.

Antwort

6

Zur Vernetzung ist die einfache Antwort,

(1) ASIHttpRequest ........ HINWEIS - das QA ist sehr alt. Leider ist ASIHttpRequest nur von historischem Interesse und nicht mehr verfügbar.

(2) AsyncSocket

(3) Wenn Sie anfangen ... GameKit (ein Kind kann es verwenden)

(4) Verwenden Sie einfach Bonjour (zwei Zeilen Code) zu finden andere Geräte.

"ein Apple-bereitgestellten Objective-C-Wrapper" ... AsyncSockets (ursprünglich von der mysteriösen Dustin J. geschrieben)Voss) ist so gut, dass Apple einfach nicht versuchen wird, einen zu schreiben!

AsyncSockets ist genau das, wonach Sie suchen. Es wird überall in den 300.000 iFone-Apps verwendet. Es ist "Networking" auf dem iFone. Ich hoffe es hilft.

WIEDER HINWEIS - diese QA ist sehr alt. Sie können jetzt leicht "moderne Versionen" von Software wie AsyncSockets finden.

BTW, es ist nichts wert, dass absolut nichts falsch ist - überhaupt - mit nur mit GK .. die Leistung kann spektakulär sein. Der einzige Nachteil ist, dass die Paarung einfach eine lange Zeit mit GK dauert. Und es ist ein kindisches Durcheinander, das für Zehnjährige geschaffen wird, die Programmieren lernen. Sie können 100x schneller arbeiten, indem Sie direkt mit AsyncSockets arbeiten.

Vielleicht möchten Sie etwas Spielzeug GK-Code verwenden, während Sie Bonjour und all das herausfinden.

Ich würde vorschlagen, der Konsens der Meinung ist, dass es keinen Sinn hat, auf einer noch niedrigeren Ebene (dh rohe Sockets) als AsyncSocket zu arbeiten. Es gibt nicht viel mehr Leistung, die darin zu haben ist.

HINWEIS - Wenn Sie neu bei Gamekit/iOS sind, lesen Sie unbedingt diesen kritischen Tipp!
Client/Server GKSessions

hoffe es hilft.

+0

Danke! Nur ein Kommentar, Ratschläge zur Verwendung von GameKit sind auf OS X nicht sehr hilfreich :-) Und ich habe Bonjour in Kombination mit BSD-Sockets, Apples CFNetwork und NStream verwendet. –

1

Ihre Frage kann nicht wirklich mit Details beantwortet werden, weil Sie nicht beschrieben haben, was Sie tun möchten. Die beste Antwort, die ich geben kann, ist, die einleitenden Netzwerkrichtlinien für Mac und iOS zu lesen.

aktualisieren

Ich glaube nicht, dass es keine „Art und Weise leicht Cocoa“ gebaut für UDP ist. Ich erinnere mich, dass diese Diskussion mehrere Male auf der Kakao-Dev-Liste aufgetaucht ist. Das cocoaasyncsocket Projekt wurde an verschiedenen Orten erwähnt. Sie behauptet:

AsyncUdpSocket eine UDP/IP-Socket Vernetzung Bibliothek, die CFSocket wickelt. Es funktioniert fast genau wie der TCP-Version, ist aber speziell für UDP ausgelegt. Dazu gehören in der Warteschlange nicht blockierende senden/empfangen Operationen, vollständige Vertreterunterstützung, Run-Loop-basierte, in sich geschlossene Klasse, und Unterstützung für IPv4 und IPv6.

+0

Während ich meine aktuelle Anwendung immer noch nicht für meine Frage für sehr wichtig halte, habe ich sie mit weiteren Informationen aktualisiert. Ich weiß von CFSockets, ich weiß, wie man Dinge mit BSD Sockets macht, aber ich frage mich, was ist der beste und einfachste Weg zum Einrichten von Verbindungen/Datagramm-Streams auf Apple-Plattformen. Mehr von einer "Best Practices" -Frage als von einer "How to do this" -Frage. –

+0

Ich verstehe. Ich habe meine Antwort aktualisiert, um einen Verweis auf eine UDP-Wrapper-Klasse aufzunehmen. –

Verwandte Themen