Mailinglist Archive: opensuse-programming-de (209 mails)

< Previous Next >
Re: Socket-Programmierung (fast Anfänger)
  • From: Michael Matz <matz@xxxxxxx>
  • Date: Sun, 9 Feb 2003 20:14:01 +0100 (CET)
  • Message-id: <Pine.LNX.4.33.0302092003260.6851-100000@xxxxxxxxxxxxx>
Hi,

On Sun, 9 Feb 2003, Holger Macht wrote:

> int main() {
> int my_socket, neu_socket, nachricht;
> sockaddr_in lokaleadresse,remote_host;
>
> if (bind(my_socket, (sockaddr *)&lokaleadresse, sizeof(sockaddr))

Du willst "struct sockaddr" nicht "sockaddr".

> if (neu_socket=accept( my_socket, (sockaddr *) &remote_host,
> &sin_size)==-1)

Du hast hier (verkuerzt): "if (a=accept (...) == -1)". Dies vergleicht
zuerst Rueckgabe von accept() mit -1 und weiss das Ergebnis (0 oder 1)
dann 'a' zu. Deine Klammerung ist also wieder mal kaputt, du willst:

if ( (neu_socket = accept (....)) == -1) ...

der besseren Lesbarkeit wegen empfehle ich aber dringend:
neu_socket = accept (....);
if (neu_socket == -1) {
...
}

Das ist auch der Fehler, der das Nichtarbeiten deines Beispieles ausloest.

> perror("accept()");
> else;
> cout <<"CONNECTION!"<<endl;

Ui. Hast du da wirklich "else;" drinstehen? D.h. dann naemlich, das das
"cout << "connection" nicht im else-Zweig steht, sondern als ganz normales
toplevel-statement. Du willst:
perror ("accept()");
else
cout << ...;

>
> char *msg="Ich habs geschafft!!";
> int len=strlen (msg);
> cout <<len<<endl;
> nachricht=send(neu_socket,msg,len,0);

Man beachte, das du hiermit den ganzen String, allerdings _ohne_ die
abschliessende '\0' sendest. Der Empfaenger hat damit keine Moeglichkeit,
das Stringende zu erkennen, und wird wohl komische Sachen mit diesem
String machen. Du willst:

char *msg = ...;
int len = 1 + strlen (msg);
....

> Ich weiss soweit, dass das irgendwas mit dem "Accept-Socket" zu tun
> haben muss. Nur in einem Tutorial steht es halt exakt so drin.

Glaub ich nicht.


Ciao,
Micha.
P.S: du machst viele C-Anfaenger Fehler. Vielleicht solltest du nochmal
irgendein Buch lesen, was an die Sprache heranfuehrt.


< Previous Next >
References