Fragen zu Netzwerkprogrammierung
-
Hi,
ich muss als Schulprojekt ein Netzwerkspiel programmieren.Wie funktioniert das ganze Netzwerkzeugs, mit den Sockets, der Listen Funktion (???), das Verbinden, Senden der Daten, Empfangen etc.
Brauch ich dafür einen Server und Client??
...
Kann mir da jemand weiterhelfen?
-
Entweder ihr benutzt die Sockets aus der MFC, wenn ihr VS habt oder ihr könnt auch die asio C++ Library benutzen, worfür ihr aber auch Boost vorher runter laden müsst:
http://asio.sourceforge.net/Da sind auch Beispiele und ein Tutorial bei.
-
Ich habe Borland 6, allerdings nur zu Hause, hier in der Schule nur Verion 5.
Gibts dazu auch etwas?
Und kannst du mir noch was zum Thema Server und Client sagen?
Wenn ich jetzt nur ein paar Werte übergeben will, braucht man da einen Server??
-
Also Borland 5 ist schon sehr alt. Das sollte man wirklich nicht mehr benutzen, da es sich absolut nicht an den ISO C++ Standard hält. Selbst Borland 6 ist noch an der Schmerzgrenze. Frag mal im Borland-Forum nach, ob die nicht was zu Borland 5 bzgl. Netzwerk wissen, wenn ihr unbedingt die 5er benutzen müsst.
Ansonst gibts auch von MS das aktuelle VisualC++ 2005 als kostenlose Express Edition. Einfach die ISO-Images bei MS downloaden und installieren. ISO Images deshalb, weil man diese nicht registrieren braucht. Das Platform SDK nicht vergessen!
englisch: http://msdn.microsoft.com/vstudio/express/visualc/default.aspx
deutsch: http://www.microsoft.com/germany/msdn/vstudio/express/visualc/default.mspxOffline-Images:
englisch: http://msdn.microsoft.com/vstudio/express/support/install/
deutsch: http://www.microsoft.com/germany/msdn/vstudio/express/manuelleinstallation.mspxWenns eine andere IDE sein soll, die kompakt und doch einen vernünftigen C++ Compiler haben soll:
http://www.codeblocks.org/Dort das Release mit MINGW-Compiler downloaden, dann habt ihr auch was vernünftiges, obwohl es klein und kostenlos ist. VC++ 2005 ist nämlich um einiges größer.
Zu dem Server: ich glaube, dir ist nicht bewusst was ein Server ist? Es ist einfach ein Programm, das auf Anfragen wartet. Ein Client ist ein Programm, das eine Anfrage macht. Nicht mehr und nicht weniger. Ein Client kann auch als Server fungieren, er muß halt nur auf Anfragen anderer Clients warten. Das muß man natürlich dann selber programmieren. Auf der asio Website sind passende Tutorials zu finden, wie man einen Server und wie man einen Client programmiert. Wird auch alles Step by Step erklärt, auch wenn es am Anfang etwas trocken erscheint. Einfach mal die Tutorials durch arbeiten, am Ende hat man die Basics drauf. Das Spiel muß man aber selber programmieren.
Ihr könnt das so machen, das im Spiel selber auch ein Server drin ist. Das Spiel muß halt auch Anfragen anderer Spieler annehmen. Dazu müssen die anderen Spieler die IP-Adresse des "Servers" kennen. Schon mal Quake3 im Netzwerk gespielt? Ist das gleiche Verfahren.
-
benutzt doch einfach die winsockets.
gutes tutorial: http://www.c-worker.ch
-
Warum soll er die Winsocks benutzen? Gibts dafür einen guten Grund?
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum Rund um die Programmierung verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Artchi schrieb:
Warum soll er die Winsocks benutzen? Gibts dafür einen guten Grund?
Nach den Fragen die er hier so gestellt hat, wird er mit Boost/Asio vermutlich noch überfordert sein.
Da wär Winsock wirklich am einfachsten.
-
Wird asio überhaupt noch weiterentwickelt? Wurde es in Boost aufgenommen?
-
Das Review-Ergebnis ist leider noch nicht veröffentlicht worden. Nichts genaues weiß man. Die Lib wird laut Boost mailingliste schon von Projekten produktiv eingesetzt und soll auch ne gute Performance zeigen. Das konnte ich aus den Reviews rauslesen. asio ist jedenfalls nutzbar, auch wenn es hier und da Kritik gab, aber das ist ja normal, das man es nicht allen C++lern Recht machen kann.
-
Ok, die Winsocks hab ich mal erstellt (Ich weiß, klasse Leistung ^^)
was macht jetzt die bind(..) Funktion genau?
-
Lies dir am besten ein Tutorial durch.
-
Ähm Frage: Borland C++ Builder 5?
Welche edition denn? Gibts bei dir auch die TClientSock-Komponenten?
-
äm, ka. wo kann ich das nachschauen?
aber ist auch nicht so wichtig eigentlich. ich mach das meiste eh zuhause, da hab ich borland 6, das geht auch.
-
Naja du hast ja mehrere Komonenten zur Auswahl? In der Regel hat da irgendwo son Tab "Internet" oder so.
-
ich hab das jetzt mal soweit, allerdings kommt bei bind() immer ein Fehler, auf 127.0.0.1 kann er aber anscheinend trotzdem verbinden?!
]//--------------------------------------------------------------------------- #include <windows.h> #include <winsock.h> #include <vcl.h> #pragma hdrstop #include <iostream.h> #pragma argsused //Prototypen int startWinsock(void); int main() { long rc; SOCKET s; SOCKADDR_IN addr; char buf[256]; // Anzahl Zeichen, die gesendet werden char conIP[15] = "127.0.0.1"; // Ziel-IP Adresse int conPort = 135; // Verwendeter Port memset(&addr,0,sizeof(SOCKADDR_IN)); addr.sin_family=AF_INET; addr.sin_port=htons(conPort); // htons() = Konvertierung für Netzwerk addr.sin_addr.s_addr=inet_addr(conIP); rc=startWinsock(); if(rc!=0) { cout << "Fehler: startWinsock, Fehlercode: %d\n" << rc; return 1; } else { cout << "Winsock gestartet!\n"; } s=socket(AF_INET,SOCK_STREAM,0); if(s==INVALID_SOCKET) { cout << "Fehler: Der Socket konnte nicht erstellt werden, Fehlercode: %d\n" << WSAGetLastError(); return 1; } else { cout << "Socket erstellt!\n"; } rc = bind(s, (SOCKADDR*)&addr, sizeof(addr)); if(rc == SOCKET_ERROR) { cout << "Fehler: Socket konnte nicht gebunden werden: " << WSAGetLastError() << endl; } rc=connect(s,(SOCKADDR*)&addr,sizeof(SOCKADDR)); if(rc==SOCKET_ERROR) { cout << "Fehler: konnte nicht verbunden werden, Fehlercode: %d\n" << WSAGetLastError(); return 1; } else { cout << "Verbunden mit " << conIP << "\n"; strcpy(buf,"Hallo wie gehts?"); rc=send(s,buf,9,0); if (rc == -1) printf("Noo\n"); else printf("Yes!\n"); rc=recv(s,buf,256,0); if (rc) printf("Yes\n"); else printf("Nooo!\n"); } getchar(); return 0; } int startWinsock(void) { WSADATA wsa; return WSAStartup(MAKEWORD(2,0),&wsa); }
]