TCP-IP Sending
-
gerne doch, einen moment bitte...
-
Danke, das sieht sehr interessant aus.
Weißt du unter (wenn überhaupt) welche Lizenz es fällt?MfG RoaN;
-
Laut der SourceForge-Seite des Projekts, steht es unter der BSD-Lizenz. Was genaueres weiß ich aber nicht...
-
Schau mal auf http://stlplus.sourceforge.net vorbei, speziell lhttp://stlplus.sourceforge.net/stlplus/docs/tcp.html
Das Ding ist hübsch einfach gehalten, und vor allem sehr STL-kompatibel.
-
Netxx und STL+ kannst du vergessen. Die Sachen werden doch nicht mehr gepflegt.
-
hi!!!
vielleicht nimmst du:
raknet: http://www.rakkarsoft.com/raknet/manual/oder posix sockets !!?? leider find ich dazu nix...hm
cu
-
Im Prinzip brauchst Du bloss die Routinen socket(), connect() und close() (bei Windows: closesocket()) auf der Client-Seite, und bind(), listen() und accept() auf der Server-Seite.
Mit socket() kannst Du einen leeren TCP/IP-Socket erzeugen (mit den Parametern AF_INET, und SOCK_STREAM).
Im Client-Betrieb brauchst Du nur noch connect() aufzurufen, um den Socket mit einer Adresse (Port/IP-Addr) zu verbinden.
Im Server-Betrieb bindest Du den Socket mit bind() an eine lokale Adresse (Port/IP-Addr), und machst dann listen(), um auf Verbindungen zu "horchen". Mit accept() kannst Du eingehende Verbindungen dann "abraeumen".
Programmiert man synchron, reicht beim Client die socket()/connect()/close() Folge aus. Nachteil ist, dass das Programm (der aktuelle Thread) nix anderes machen kann waehrend die Verbindung laeuft.
Beim Server wird (im Synchronbetrieb) oft so programmiert, dass der Server-Thread zunaechst socket(), bind() und listen() aufruft, und dann fuer die bei listen() angegebene Warteschlangengroesse (Standard: 5) die entsprechende Anzahl Threads startet. Jeder dieser Accept-Threads macht nix anderes als in einer Schleife zuerst accept() und bei Beendigung der Verbindung dann close() aufzurufen.
Daten werden meist mit recv() und send() uebertragen.
Im Pseudo-Code sieht das Ganze so aus:
// Client s = socket( ... ); rv = connect( s, ... ); close( s ); // Server s = socket( ... ); bind( s, ... ); listen( s, ... ); // Accept-Thread for (;;) { s = accept( ... ); ... close( s ); }
Diese Loesung ist weitestgehend portabel.
Bei Windows ist diese Solaris-Socket-Implementation ueber die WinSock 1.x Schnittstelle zu bedienen.
Bei UNIX-Systemen ist sie eigentlich immer gleich.
Vorsicht bzgl. der Plattformunabhaengigkeit ist nur bei select() geboten, mit dem man pruefen kann, ob an einem Socket Daten anliegen, der Ausgabepuffer wieder Platz hat, oder ob ein Fehler aufgetreten ist. Benutzt man dafuer die entsprechenden Makros FD_SET(), etc., gibt es eigentlich auch da keine Probleme.
Die Error-Codes unterscheiden sich zwischen Windows und UNIX-Systemen. Da ist auch noch Vorsicht geboten, falls Du die Error-Codes abfragen willst.
Hoffe, das hilft!
-
Was brauche ich dafür?
-
hi!
du solltest mal da paar tutorial lesen:
/////// Socketprogrammierung ///////
http://www.c-worker.ch/
http://madwizard.org/view.php?page=tutorials.networking.contents&lang=cpp
http://www.linuxgazette.com/issue74/tougher.html
http://www.online-tutorials.net/netzwerk/tutorials-10.html
http://www.ecst.csuchico.edu/~beej/guide/net/html/
http://www.gamedev.net/reference/list.asp?categoryid=30
http://www.gamedev.net/reference/articles/article1587.asp
http://www.gamedev.net/reference/articles/article1059.asp
http://www.kickme.to/netkomp/wie du siehst, kannst du ganz leicht selber ne portable socket klasse schreiben...
cu
-
Bin mal kurz einen braunen Kojoten abseilen...
-
... so fertig.
Jepp, ich denke das sollte mir helfen.
Danke für die vielen Links.MfG RoaN;
-
Hab das Beispiel von c-worker.ch zum laufen bekommen.
Das sieht mir aber doch alles arg nach C aus, gibt es in C++ nicht einfach einen Stream dafür?
MfG RoaN;
-
> Netxx und STL+ kannst du vergessen. Die Sachen werden doch nicht mehr gepflegt. Seltsam. Laut sourceforge bringt stlplus alle paar Monate ein release raus. Version 2.2 ist im September 04 erschienen...