Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

11.12.2010, 10:20

[Erledigt] Netzwerkprogrammierung - Winsock Beispiel Fragen

Moin moin,

ich beschäftige mich gerade ein bisschen mit Netzwerkprogrammierung und hab mir mal das Winsock client/server Beispiel aus der MSDN vorgenommen.

http://msdn.microsoft.com/en-us/library/ms737889

Das meiste kann ich bis jetzt nachvollziehen, nur eins ist mir nicht klar.
Hier:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
int __cdecl main(int argc, char **argv) 
{
...
...
...
 // Validate the parameters
    if (argc != 2) {
        printf("usage: %s server-name\n", argv[0]);
        return 1;
    }


wird der erste Parameter der main-Funktion überprüft, wobei bei mir das Programm immer aussteigt.
Lasse ich die Überprüfung weg funktioniert alles wunderbar.

argc beschreibt ja nur wie viele strings in argv enthalten sind, in meinem Fall ist es eben nur einer (nicht die gewollten 2) welcher den Pfad zur exe-Datei meines Programms enthält.

Kann mir jemand sagen warum es nur einer ist, und was der 2. eigentlich sein sollte?


Danke im Voraus
Gruß Cy

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Cyborg« (11.12.2010, 13:03)


Stazer

Alter Hase

Beiträge: 468

Wohnort: Berlin

Beruf: Student

  • Private Nachricht senden

2

11.12.2010, 10:36

Dein Programm schliesst sich immer weil du ihm keine Argumente überliefert hast.
Das sagt ja auch die if aus.
Wenn nicht gleich 2 Argumente überliefert wurden , dann schliesse das Programm.
Kannste du eigentlich weglassen , außer du willst dem Programm irgendwelche Argumente mitgeben.
Hat nichts mit dem Netzwerk zu tuhen , sondern nur das du dein Programm z.b. so aufrufen kannst.

Programm.exe 127.0.0.1 80

Dann kannst du das Programm so schreiben , dass die IP 127.0.0.1 ist und der Port 80.

MfG Stazer

Edit : Gib mal Code

3

11.12.2010, 12:49

Danke Stazer für die Antwort! :)

Soweit schon mal alles klar, aber ist es normal, dass argv[0] immer den Pfad der exe-Datei enthält?

PS: Code gibts im ersten Post, wenn du auf den Link klickst.

Gruß

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

4

11.12.2010, 12:57

Soweit schon mal alles klar, aber ist es normal, dass argv[0] immer den Pfad der exe-Datei enthält?

Ja das ist normal.

5

11.12.2010, 13:02

Ahhh ^^

Und schon ist alles geklärt.
Danke euch beiden!

Gruß

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

6

11.12.2010, 13:16

War nur die halbe Wahrheit. Darum hier noch der Ausschnitt aus dem Standard:

Zitat von »3.6.1/2«

and
int main(int argc, char* argv[]) { /* ... */ }
In the latter form argc shall be the number of arguments passed to the program from the environment in
which the program is run. If argc is nonzero these arguments shall be supplied in argv[0] through
argv[argc-1] as pointers to the initial characters of null-terminated multibyte strings (NTMBSs)
(17.3.2.1.3.2) and argv[0] shall be the pointer to the initial character of a NTMBS that represents the
name used to invoke the program or "".
The value of argc shall be nonnegative. The value of
argv[argc] shall be 0. [Note: it is recommended that any further (optional) parameters be added after
argv. ]

Werbeanzeige