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.
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 > |