TCP-Server in Cocoa?

MalefixOmo

MalefixOmo

Aktives Mitglied
Thread Starter
Dabei seit
19.02.2008
Beiträge
336
Reaktionspunkte
15
Mein Projekt ist ein einfaches Onlinespiel, das wie ein Chat zwischen einem Server und mehreren Clients funktioniert und auf mehreren Plattformen laufen kann (Mac, Windows, Linux, iOS). Als beste kommunikationsart erschien mir deswegen TCP.
Der Mac-Client benutzt dazu NSStream.
Der Server ist auch ein Cocoa-Programm, und soll nicht nur empfangene Nachrichten verarbeiten und Nachrichten senden können, er soll auch Verbindungen aufnehmen können. Da ich nirgendwo herausfinden konnte, wie man einen NSStream als Port-listener benutzt, gehe ich davon aus, dass dies nicht möglich ist. (Stimmt das?)
Also habe ich viel herumgesucht und bin schließlich auf AsyncSocket gestoßen und habe es in meinen Server eingebaut. Nur wenige Testläufe funktionierten, und ich konnte den Grund, warum der Server so oft gecrasht ist, nicht herausfinden. Das "funktioniert/funktioniert nicht"-Muster scheint zufällig.

EDIT: Der Server ist immer beim Senden einer Nachricht vom Client an den Server gecrasht. Alle Threads zeigten entweder nichts oder "mach_msg_trap" (wartender Thread) an.

Also: Ist euch mein Problem bekannt, wie kann ich es beheben?
Bzw: Gibt es einfache(!) Alternativen zu AsyncSocket?
 
Hier gibt es einen kleinen HTTP Server als Beispiel.

http://culturedcode.com/cocoa/

Vielleicht liefert er ja ein paar Anregungen. Ist allerdings schon etwas älter...
 
Wie wärs mit ner Implementierung von XMPP (Jabber)?
Nachrichten Versenden ist das Spezialgebiet von dem Teil :D
 
Geil, dann würd ich das echt nehmen.
Unter welcher Lizenz steh denn das Teil? Ich hab da nix gefunden.
 
GANZ GROSS in der Box rechts steht auf der Projekt Homepage: New BSD License mit Link, was das bedeutet....

hihi: ich bin ja selbst blind, meine Ausrede: ich bin immerhin 40+ , aber das hab sogar ich gesehen ;-)
 
:hamma: wird echt Zeit für ne Brille - oder es liegt am 27" iMac - zuviele störende Pixel...
Ich fall vom glauben ab - BSD - is ja geil. Ich hab schon so nen gammel GPL befürchtet, deswegen hab ich das nicht weiter beachtet... Danke!
 
Das Teil benutzt ja auch AsyncSocket. Und verursacht bei mir ähnliche Fehler wie oben beschrieben.
Wir haben das Problem jetzt umgangen: ein anderes Teammitglied hat den Server übernommen (in Java) und ich bin nur noch für den Mac-Client "zuständig".
Dort bin ich wieder auf ein Problem gestoßen:
Ich habe einen TCP-Tester geschrieben, bei dem das Verbinden, Empfangen von Nachrichten und Senden der ersten Nachricht problemlos funktioniert.
Wenn ich allerdings eine zweite, dritte, … Nachricht sende, kommt sie zwar beim Empfänger an, allerdings inmitten von Sonderzeichen jeder Art, und manchmal sind noch Dateipfade wie file://localhost/System/Library/CoreServices/ dabei. Woran kann das liegen?
 
Kannst du uns mal ein paar Code-Snippets geben? Ohne wird es schwer, dir zu helfen


PS: Du scheinst irgendwie ein wenig Schwierigkeiten mit den OSI-Layern zu haben. Kleine Aufgabe für dich: Auf welcher Ebene kracht es denn wirklich? (http://de.wikipedia.org/wiki/OSI-Modell komplett lesen, verstehen und dann antworten ;) )
 
  • Gefällt mir
Reaktionen: MalefixOmo
Guude,

das OSI-Modell musste ich mir kürzlich auch in mein Hirn prügeln. Allerdings nur grob, welche Schicht was macht. Jedenfalls gibt es einige Abkürzungen die dich NIE MEHR vergessen lassen, wie das OSI-Modell aufgebaut ist. Mein Favorit für Application, Presentation, Session, Transport, Network, Data Link, Physical:
A
P ussy
S o
T ight
N o
D ick
P enetrates
Top-Down versteht sich :D

Hier[1] gibts noch mehr davon

[1] http://de.wikipedia.org/wiki/Liste_von_Merksprüchen#Informatik
 
Pfui! :D


Naja, ich gebe ja zu, dass OSI etwas akademisch ist. Kein Netzwerk-Stack implementiert das alles so strikt getrennt. Es hilft aber beim Verständnis von Problemen. Man kann es einfacher zuordnen und vermischt nicht TCP mit XMPP.


Guude,

das OSI-Modell musste ich mir kürzlich auch in mein Hirn prügeln. Allerdings nur grob, welche Schicht was macht. Jedenfalls gibt es einige Abkürzungen die dich NIE MEHR vergessen lassen, wie das OSI-Modell aufgebaut ist. Mein Favorit für Application, Presentation, Session, Transport, Network, Data Link, Physical:

Top-Down versteht sich :D

Hier[1] gibts noch mehr davon

[1] http://de.wikipedia.org/wiki/Liste_von_Merksprüchen#Informatik
 
Zuletzt bearbeitet:
Hey,

erstmal Hi ist mein erster Beitrag.

Und zwar möchte ich mir gerade einen TCP Server bauen, damit ich mit einem iPhone App im Simulator darauf connecten kann und Nachrichten schicken kann.
Der Server soll dann auf die Nachrichten antworten.

So nun habe ich diesen Link von hier oben genommen
http://developer.apple.com/mac/libra...ion/Intro.html
und mir des Sample Code geladen. Jetz wollte ich den server ausführen bekomme aber den Fehler:
Cocoa/Cocoa.h: no such file directory

Der Server soll auf einem iMac laufen, also müsste doch cocoa/cocoa.h passen?

Ich hoffe jamand hat nen Tip.
Oder einen TCP Server der auf einem Mac läuft, das wäre auch super.

Grüße und vielen Dank
Klist
 
Das stimmt, Cocoa/Cocoa.h müsste da sein. WENN Du das richtige Projekttemplate gewählt hat.

Aber nur so als Tip: Ich bau mir sowas zum Testen lieber in Ruby

Alex
 
Danke... Wie meinst das mit dem Projekttemplate? Ich hab mir einfach nur den Sample Code geladen und diesen geöffnet.
Kann sowas leider nich in Ruby, gibts da nicht irgwas fertiges?
Danke Klist
 
Naja, einen TCP-Socket aufzumachen ist nicht das Ding. Empfangen muss er aber trotzdem noch was (sprich auf dem Socket "read()" ausführen). Das geht wirklich am leichtesten in irgendeiner dir beliebigen Scriptspache weil die da schon massenhaft Convenience-Funktionen in ihrer Standardbibliothek mitbringen. Neben Ruby, was Alex so gern verwendet, fällt mir auch Python ein ;) Das nehm ich bei sowas. Einfach so was fertiges gibt es nur, wenn irgendjemand schonmal auf die Idee kam, genau die Nachrichten zu empfangen, die du da versenden möchtest.
 
Zuletzt bearbeitet:
Man kann es ja noch so verändern, dass das mit den Nachrichten funzt. Ich meinte da einfach nur mal einen fertigen TCP server der nur mal Nachrichten empfangen kann. Und dann mit einem beliebigen Client drauft connecten und ne Nachricht schicken.
Falls das dann geht selber eine Antwort-Methode implementieren oder so.
Kann leider nur C++, C und eben jetzt etwas Cocoa bzw. objective-C

@Buk was soll ich mit der Seite machen? Hab mir das runtergeladen aber weiß nicht was ich dann machen soll?
 
Zuletzt bearbeitet:
Supi ;) zieh ich mir heute Abend noch alles rein ;) mit was Codet man am besten C bzw C++, auch mit xCode?
 
Zurück
Oben Unten