Sockets en C

Bonjour à tous,
Je me suis mis récemment à la prog réseau, et j’ai trouvé quelques cours interessants.
Le probleme, c’est que mon humble compilateur ne veut pas…compiler. :stuck_out_tongue:
Voila le code du client et du serveur :

Client :

[code]#include <stdio.h>
#include <conio.h>
#include <winsock.h>

#pragma comment(lib, « wsock32.lib »)

void main()
{
WSADATA WSAData;
WSAStartup(MAKEWORD(1,0), &WSAData);

SOCKET sock;
SOCKADDR_IN sin;
char buffer[255];

sock = socket(AF_INET, SOCK_STREAM, 0);

sin.sin_addr.s_addr = inet_addr("127.0.0.1");
sin.sin_family &nbsp; &nbsp; = AF_INET;
sin.sin_port &nbsp; &nbsp; = htons(4444);

connect(sock, (SOCKADDR *)&sin, sizeof(sin));

   memset(buffer,0,255);
recv(sock, buffer, sizeof(buffer), 0);
   printf("%s",buffer);
   getch();
closesocket(sock);
WSACleanup();
}[/code]

Serveur :

[code]#include <stdio.h>
#include <winsock.h>
#pragma comment(lib, « wsock32.lib »)

void main()
{
char buffer[255];

WSADATA WSAData;
WSAStartup(MAKEWORD(1,0), &WSAData);

SOCKET sock;
SOCKET csock;
SOCKADDR_IN sin;
SOCKADDR_IN csin;

sock = socket(AF_INET, SOCK_STREAM, 0);

sin.sin_addr.s_addr = INADDR_ANY;
sin.sin_family &nbsp; &nbsp; = AF_INET;
sin.sin_port &nbsp; &nbsp; = htons(4444);

bind(sock, (SOCKADDR *)&sin, sizeof(sin));
listen(sock, 0);

while(1)
{

 int sinsize = sizeof(csin);
 if((csock = accept(sock, (SOCKADDR *)&csin, &sinsize)) != INVALID_SOCKET)
 {
          memset(buffer,0,255);
          wsprintf(buffer,« Bienvenu sur mon serveur;) »);
          send(csock,buffer,255,0);
 }
}
}[/code]

Je programme avec Dev-C++ 4, et je n’ai pas winsock2.h (c’est pour ça que j’ai utilisé winsock 1.0)

Je peux pas trop t’aider pour les sockets, par contre je pense que tu obtiendrais plus d’aide si tu mettais le message d’erreur que te renvois ton compilateur :stuck_out_tongue:
Bonne chance :stuck_out_tongue:

Voila les erreurs qu’il me retourne :

[code]Ligne 13
parse error before `sock’

Ligne 17
`sock’ undeclared (first use in this function)
(Each undeclared identifier is reported only once for each function it appears in.)

Ligne 19
warning: built-in function `sin’ used without declaration

Ligne 19
request for member `sin_addr’ in something not a structure or union

Ligne 9
warning: return type of main' is notint’

Ligne 24
`buffer’ undeclared (first use in this function)[/code]

Et j’en passe…(y’en a 10 en tout) Apparemment c’est l’include <winsock.h> qui est pas pris en compte…

#pragma comment(lib, “wsock32.lib”)

a verifier: je crois que cette ligne de commande est destinee au compilateur MSVC et pas devcpp…

Sigh.
Tu as appris a programmer en C ou c’est un programme que tu fais juste pour apprendre a programmer? Et tu utilises des bouts tous prets? Plus ou moins bien colle?
Bon je casse la mais un prof de C qui voit ca, il faut qu’il s’inquiete de la qualite de son cours…

Bref, pour ton probleme. Je ne connais pas bien winsock ni devcpp, mais je connais bien le C et ON A PAS LE DROIT DE LANCER UNE FONCTION AVANT D’AVOIR FINI DE DECLARER DES VARIABLES. :stuck_out_tongue:

Je sais, je gueule, mais c’est la BASE du langage quoi, c’est inadmissible comme erreur, ou c’est une faute d’etourderie mais on pose pas la question sur un forum (a moins qu’on souhaite se faire moquer de soi).

Je suis un peu mechant la, mais avant de faire quelque chose de complexe, essaye d’abord de faire des trucs simples qui fonctionnent. Revise tes cours. Engrange de l’experience pour ne plus bloquer sur ce genre d’erreurs stupides.

LoneWolf
Traitement de choc.

Pour répondre à ta question, oui, c’est un code pour apprendre à programmer et oui, je l’ai trouvé sur un site et je l’ai collé.

Je l’ai trouvé ici

PS : J’ai enlevé “#pragma comment(lib, “wsock32.lib”)” et à la place j’ai inclu “wsock32.lib” dans “Project Options”, mais aucun changement.

hahaha corsac, t’es qu’un connard :stuck_out_tongue:

Bon, seiken, faut qu’on cause.
Que tu fasses une boulette sur un prog, passe encore, meme la pire des conneries comme celle ci, mais que tu t’attribue (meme implicitement) le taf d’un autre, c’est vraiment vraiment pas bien. Meme, et SURTOUT, quand le taf est aussi mauvais. Tu viens de perdre plein de points dans ta cote de credibilite, la. De plus, je pense que tu aurais du poser la question sur le site d’ou tu tiens le code (on voulait epater la galerie cafzonnienne avec un code reseau « cool »?).

Mais. On parle, on parle, mais on avance pas. Tu veux apprendre le C? Super. Tu vas deja commencer par lire des cours d’algorithmique, je sais que c’est barbant, mais c’est la base de la programmation, et ca aide bien plus qu’on ne croit. Essaye deja ca http://dilib.inist.fr/dilib/v04Public/Docu…/index.fre.html , j’ai trouve celui la en faisait des recherches sur google.com

Ensuite, du C. Ce cours la semble sympa:
http://www.ltam.lu/Tutoriel_Ansi_C/prg-c_c.htm

Concernant le bout de prog qui plante, je ne te dirais pas la solution pour que ca compile. Essaye d’abord de comprendre ce que tu fais. Pour les gens qui veulent se moquer, ca vient de lui http://www.iprezo.org/ et ca fonctionne chez lui parce qu’il utilise le mode de compilation C++ (ou la regle que j’ai evoque plus haut n’existe pas).
Il y a une vrai solution pour que ca compile en C, toute conne (si la lib est prevu pour, note), et je te laisse chercher.

LoneWolf
Solution au probleme de seifer dans quelques temps, PAR seifer. Mais Si. Stay tuned.

[quote name=‹ LoneWolf › date=’ 24 Apr 2005, 20:48’]Bref, pour ton probleme. Je ne connais pas bien winsock ni devcpp, mais je connais bien le C et ON A PAS LE DROIT DE LANCER UNE FONCTION AVANT D’AVOIR FINI DE DECLARER DES VARIABLES. :stuck_out_tongue:
[right][post=« 353076 »]<{POST_SNAPBACK}>[/post][/right][/quote]

Ca ca dépend des compilos :P. Certains réordonnent automatiquement les déclarations en début de fonction. Toutefois, il est vrai que le faire a la mano, c’est largement plus propre.

[edit]
Si avec totues nous indications, il trouve pas… :stuck_out_tongue:

Ps: le code est pas si déguelasse que ca… j’en ai fait des bien pire dans mes début de C :P.

Je crois qu’il y a un malentendu…
Je n’ai pas cherché à m’approprier ce code, d’ailleurs, à aucun moment je n’ai mentionné que c’était moi qui l’avait écrit, mais comme je n’ai aucune notion de prog réseau, je me suis permis de prendre un code complet, voir ce qu’il donne une fois compilé, et ensuite l’étudier plus en profondeur. C’est peut etre mal vu, mais c’est ma méthode.
Le but n’était en aucun cas “d’épater la galerie”.

[quote name=‹ Seiken › date=’ 25 Apr 2005, 11:46’]Je crois qu’il y a un malentendu…
Je n’ai pas cherché à m’approprier ce code, d’ailleurs, à aucun moment je n’ai mentionné que c’était moi qui l’avait écrit, mais comme je n’ai aucune notion de prog réseau, je me suis permis de prendre un code complet, voir ce qu’il donne une fois compilé, et ensuite l’étudier plus en profondeur. C’est peut etre mal vu, mais c’est ma méthode.
Le but n’était en aucun cas « d’épater la galerie ».
[right][post=« 353179 »]<{POST_SNAPBACK}>[/post][/right][/quote]

Disons que vu l’état du code et ta difficulté à interpréter les messages d’erreurs, il est assez clair que tu prends le problème à l’envers :stuck_out_tongue: Ce n’est pas du java ou php que tu cognes là. Il faut de la méthode et de la rigueur :stuck_out_tongue:

EDIT : l’idée de s’inspirer d’un bon code pour comprendre/voir une application concrète de l’usage d’un langage n’est pas une mauvaise idée en soi mais là, le code est sale, ce n’est pas du C d’ailleurs (cf. remarque de LoneWolf) et c’est dédié à l’environnement Windows (la directive #pragma message() n’existe pas en C), ce qui est contradictoire avec l’idée même du C/C++ langage portable. Bref, tu vois c’est quand même pas mal à l’envers :stuck_out_tongue:

Bon euh… :stuck_out_tongue: j’ai compilé en mode C++ et y’a plus d’erreur… mais maintenant a la fin de la compilation ça me met :
Size of output file : 0 bytes
Et rien ne s’affiche.
Dans le linker j’ai
« wsock32.lib » : no such file in directory

Visiblement, je n’ai pas ce wsock32.lib. Ou est ce que je peux le trouver ?

Comparer java et php, faut oser, ou ne rien y connaître. A choix.
Comme ce message ne fait que répondre à côté, je te file une URL béton pour apprendre le C. Exercices, cours et résumés :

http://icwww.epfl.ch/~chaps/prog3/

Bon j’ai retrouve le document original (on dirait) du code que t’as trouve, seiken:
http://c.developpez.com/WalrusSock/

Le document est plus complet et il y a des references qui semblent interessante.

M’enfin commence deja par apprendre le C…

edit: pour eviter un post qui sert a rien, je dis que je suis super d’accord avec moktar, en dessous, le C, c’est bien plus complexe a maitriser que le PHP (encore que maitriser correctement le PHP, c’est pas mal aussi). Sinon moktar, je crois que « la reponse a cote », Mav’ parlait de lui meme et de son post qui sert a rien, hein :stuck_out_tongue:

LoneWolf
La charrue avant les Boeufs. :stuck_out_tongue:

[quote name=‹ Maverick › date=’ 25 Apr 2005, 12:23’]Comparer java et php, faut oser, ou ne rien y connaître. A choix.
Comme ce message ne fait que répondre à côté, je te file une URL béton pour apprendre le C. Exercices, cours et résumés :

http://icwww.epfl.ch/~chaps/prog3/
[right][post=« 353207 »]<{POST_SNAPBACK}>[/post][/right][/quote]

Je ne les ai pas comparé. J’ai juste inséré un petit troll :stuck_out_tongue:

Une réponse à côté ? je n’ai pas d’URL à donner pour l’apprentissage du langage, je ne vais donc pas en fournir une que je n’ai pas évalué précisément. Ensuite, préciser que le C décrit n’est pas ANSI mais du MS ne me semble pas dénué de sens. Pour finir, réponds-tu aux interrogations première de Seiken ? (relis son premier post).

J’ai l’impression que tu as mal pris mon trollage sur php et/ou java, c’est ça ? :P"

EDIT : Pour préciser, c’est un poil pénible de voir arriver des geeks voulant se mettre au C/C++ comme ça sur un coin de table, au même titre qu’on peu le faire « en sauvage » avec des langages de type java/php. Ok ok, on peut cogner du code propre en java et php, quoique :stuck_out_tongue: <=== un autre petit au cas où tu l’aurais loupé mais ces langages offrent une telle accessibilité de prime abord, qu’on voit tout le monde dev en php (un peu moins en java il est vrai) croyant ainsi qu’on peut se mettre au C/C++ en faisant du copier coller et en cliquant pour compiler… Zzzzz…
Bref, peu importe.
Pour ce qui est du C/C++, je conseille les docs de références Kernighan et Ritchie C ANSI et Le Stroustrup pour le C++. Pour ce qui est de l’apprentissage… mmm… attention aux documents trèès orientés MS qui te montrent, non pas du C/C++, mais l’usage de leurs APIs en C/C++. Mef.

J’accroche pas là. Désolé.

Pourquoi tu parles de GCC ? comprends vraiment pas, quant à ton délire là heuuu… bref.

[quote name=‘Moktar’ date=’ 25 Apr 2005, 16:22’]J’accroche pas là. Désolé.

Pourquoi tu parles de GCC ? comprends vraiment pas, quant à ton délire là heuuu… bref.
[right][post=“353326”]<{POST_SNAPBACK}>[/post][/right][/quote]

La drogue fait des ravages dans notre doux pays …

Koubiak qui s’est encore exhilé.

moktar : ton troll sur java est ridicule.
Je vois pas en quoi il est plus simple de faire du java que du C. Faire proprement les 2 demande les memes base d’algorithmique.
J’ai programmer tres longtemps dans plusieurs langage (C, C++, et Java pour ceux sur lequels j’ai passer le plus de temps de maniere professionnel), et j’ai pas eu l’impression que l’un etait mieux que l’autre. Different. Mais pas “mieux”.
Ils font appel aux meme connaissances d’algorithmie et demande la meme attention pour programmer proprement et pour ne pas faire de la merde.
Simplement ils fonctionnent differemment sur le fond, les concepts ne sont pas les meme (procedural / objet / evenementiel). La est la vrai difference. Mais elle n’est certainement pas sur un “faut etre plus couillu pour faire du java que du C”, ou l’inverse. Pour etre bon dans un langage, il faut bien comprendre ses mechanismes internes, et ne pas chercher a “faire du C en C++” par exemple. Ce qui n’implique rien quand a la superiorité d’un langage sur un autre.
Et quand tu as compris ca, tu as tout compris …
Cette vieille gueguere pueril du “mon langage a une plus grosse que le tiens” est vraiment lassant…
Et le ramener discretos en trollant salement puis en faisant comme si de rien, c’est d’un nul.

Voila, c’etait le off topic.

Et pour repondre a la question de notre ami : Tu te plante de maniere de faire. Partir d’un existant et l’analyser, n’est pas une mauvaise methode quand on a deja un backgroud minimal.
Sinon, c’est l’assurance de piger de travers et de jamais vraiment savoir faire.

Tres sincerement, suis le conseil de lonewolf : commence par l’algorithmie et va y mollo.
Commencer par une application client serveur quand on sait pas faire compiler un bout de code de 2 lignes n’est pas le plus simple…

Bon je suis pas fan de Java, et je connais mal ce langage, mais personnelement, ce que j’ai « compris » des intervention de moktar, c’est qu’un bout de code java copier coller dans un compilo a plus de chance de tourner un peu n’importe ou qu’un bout de code C.
Donc c’est pas specialement etre plus couillu, mais je trouve que le C est moins facile d’acces que le java (et le PHP, n’importe quel blaireau peut faire un truc qui tourne - rooh je blague, les dev PHP :stuck_out_tongue: )

Concernant les connaissances de bases, je suis a moitie d’accord: Ca peut paraitre paradoxal, mais je trouve que l’objet n’a rien de naturel a l’utilisation. C’est mon avis juste hein, mais bon, le C++, le java ou le C#, j’y peux rien hein, j’y arrive pas.

LoneWolf
le C, c’est top et le java, ca pue du cul :stuck_out_tongue:

Un peux de clean up…
La prochaine fois que ca part en couille : je lock.
Et Si ca continue : je clear.

Bonjour chez vous !

Lonewolf, je te rejoins la dessus: n’importe quel imbécile peut faire du PHP. Mais pour coder du PHP propre, c’est une autre histoire.

Par exemple la je suis webmaster dans une boite qui avant avait une personne qui programmait le PHP n’importe comment.

Je te passe le résultat:

  • application impossible à maintenir
  • effets de bords à la con sur pas mal de fonctions
  • je peux même pas mettre mon interpréteur PHP en mode strict, toutes les pages refuseraient de fonctionner

Bref en gros quand on me demande de modifier un comportement, j’ai plus vite fait de réécrire toute la page que essayer de comprendre l’ancien code (qui « marche »).

Donc PHP, oui c’est laxiste, mais c’est pas pour ca qu’il faut coder comme un porc :P. Le C est bien pour ca: au moins, t’es forcé de bien coder :P.