Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
12.04.2007, 20:48
Cpt. Rick



Ich hab mal meinen alten Server mit 3 Clients ausgegraben und auf n Clients umgeschrieben.
Es soll später mal die Basis für ein Spiel übers Internet sein, aber da liegt auch garnicht das Problem.
Ich bekomme einen seltsamen error!

Hier die Datei server.c:
http://treky21.tr.funpic.de/server.c

und die Datei start_svr.h:
http://treky21.tr.funpic.de/start_svr.h

Der error ist an folgender Stelle in der Datei server.c:
Quellcode:Zeile 133: closesocket(acceptSocket[n]);
Zeile 134: closesocket(connectedSocket[n]);
Zeile 135: WSACleanup();
Der error ist folgender:

Zeile 133: `acceptSocket' undeclared (first use in this function)
[build error] (each undeclared identifier is reported only once
[build error] for each function it apears in)
Zeile 134: `connectedSocket' undeclared (first use in this function)

Dabei wurden beide Sockets zuvor deklariert!?

--


Dieser Beitrag wurde am 12.04.2007 um 20:48 von Cpt. Rick bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
001
12.04.2007, 21:38
Bluthund



Nach Zeile 127 existieren die genannten Variablen nicht mehr. Siehe Gültigkeitsbereich von lokalen Variablen in C.

edit: Außerdem gehören in ein Headerfile keine Funktionsdefinitionen...

--

The C language combines all the power of assembly language with all the ease-of-use of assembly language.
"humorig is n blödwort :>" by -CarniGGeLjumpR-


Dieser Beitrag wurde am 12.04.2007 um 21:39 von Bluthund bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
002
12.04.2007, 21:55
Cpt. Rick



Ich habe zu dem Thema einen interessanten Beitrag gefunden: http://www.user.tu-berlin.de/looprjbb/it/C_Kurs/funktion/Html/lektion_5/lektion_5.html

Aber wie sorge ich nun dafür dass die beiden Sockets auch außerhalb dieses Blockes gültig sind? Ich kann sie ja nicht mit der Anzahl der Spieler deklarieren, bevor ich diese kenne (sprich, erst nach der Eingabe von "player") !?

--

zum Seitenanfang zum Seitenende Profil || Suche
003
12.04.2007, 22:11
HammerBlade



Du definierst acceptSocket und connectedSocket nach dem 'int player = 0;' in Zeile 56 als Pointer:
Quellcode:SOCKET* acceptSocket = NULL;
SOCKET* connectedSocket = NULL;
Und alloziierst den Speicher für die Arrays dann an der Stelle wo du die Anzahl der Spieler kennst; in Zeile 102.

Quellcode:acceptSocket = malloc(player * sizeof(SOCKET));
connectedSocket = malloc(player * sizeof(SOCKET));
Und musst dann am Ende vor dem 'return 0;' den Speicher wieder frei geben:

Quellcode:free(acceptSocket);
free(connectedSocket);

--

"Mit C++ (noch besser mit C) kann man sich _sehr_ leicht in den Fuss schiessen." - theDon
Auspack und freu! - Auszug aus einer, aus dem japanischen übersetzten, Bedienugsanleitung für ein Spielzeugaquarium.
--
Photon Audio Player | Majestic42.net | How To Ask Questions The Smart Way

zum Seitenanfang zum Seitenende Profil || Suche
004
12.04.2007, 23:23
Cpt. Rick



Das ist super!
Das heißt aber auch dass ich kein closesocket(); mehr brauche und nur nocj free(); verwende, richtig?

Und wie greife ich nun auf die Sockets zu? Nach wie vor über ein array?

--

zum Seitenanfang zum Seitenende Profil || Suche
005
13.04.2007, 01:09
Kriz



Nein, du solltest einen Socket auch wieder schließen, wenn er nicht mehr gebraucht wird. closesocket() führt eventuell noch wichtige Aufräumarbeiten durch, z.B. free'd die Funktion ebenfalls vorher alloziierten Speicher usw. Erst _danach_ sollte man den Zeiger auf den Socket wieder freigeben.

Nein, ein alloziiertes Objekt und ein Array sind zwei Paar Schuhe. Zugriff auf das Objekt erfolg günstigerweise mit dem Dereferenzierungsoperator -> oder meinetwegen auch per *. Kombo.

------

Erm, nimm mir das jetzt nicht übel, aber wie kann man Network-Apps in C schreiben, ohne eine Ahnung von Zeigern, Dereferenzierung usw. zu haben? Das ist mehr als nur fundamental...

--

K:R-I)Z++
"CSS ist cascading style sheets. Und nicht so'n Ranzspiel." - dp
In memory of Voice († 2005/03/30)

zum Seitenanfang zum Seitenende Profil || Suche
006
13.04.2007, 01:29
Cpt. Rick



Zitat:
Kriz postete
...
Erm, nimm mir das jetzt nicht übel, aber wie kann man Network-Apps in C schreiben, ohne eine Ahnung von Zeigern, Dereferenzierung usw. zu haben? Das ist mehr als nur fundamental...
Wir lernen C in der Schule und der Lehrer ist grausam. Wir machen dass jetzt ein Jahr lang unf sind gerade mal dabei angekommen wie man Funktionen erstellt, ohne jemals von pointern oder sonst etwas gesprochen zu haben.

Ich habe zwar versucht mich dort einzuabreiten, aber es scheitert hauptsächlich am Zeitmangel.

Schonmal vielen Dank für eure Hilfe. Mit diesen Stichworten kann ich wenigstens mal geziehlt suchen ;)

--

zum Seitenanfang zum Seitenende Profil || Suche
007
13.04.2007, 01:56
Kriz



Zitat:
Cpt. Rick postete
Wir lernen C in der Schule und der Lehrer ist grausam. Wir machen dass jetzt ein Jahr lang unf sind gerade mal dabei angekommen wie man Funktionen erstellt, ohne jemals von pointern oder sonst etwas gesprochen zu haben.
Wtf? Was ist denn das für eine traurige Figur? Nach einem Jahr sollte man sowas aber schon längst abgehandelt haben. Was für ein Spack von Lehrer...

--

K:R-I)Z++
"CSS ist cascading style sheets. Und nicht so'n Ranzspiel." - dp
In memory of Voice († 2005/03/30)

zum Seitenanfang zum Seitenende Profil || Suche