Emmanuel Delahaye C is a sharp tool | les gens roots a écrit :
J'ai besoin de faire un client C tout simple dans lequel je dois passer un num de port et un message en argument.
J'ai étudié ce langage en cours mais j'avoue que j'y ai jamais rien compris et que j'ai jamais réussi à faire un prog sans erreurs t_t.
Je travaille habituellement en VB.NET, langage très différent et beaucoup plus simplifié (je trouve).
J'ai bien sûr maté sur google des exemples tout faits de clients C, mais je n'arrive pas à en builder ne serai-ce qu'un seul.
Quelqu'un pourrait-il me donner un exemple tout simple qui fonctionne sur windows?
|
Il faut que tu comprennes bien que le langage C ne permet pas de 'faire un client'. Il permet simplement de mettre en oeuvre des fonctions systèmes (par exemple, les sockets) qui n'ont rien à voir avec le langage C. C'est l'ensemble de la maitrise des ces deux domaines : - sockets (dont certains détails dépendent du système)
- langage C
qui fait que tu pourras éventuellement réaliser un programme tel qu'un client en C. Encore faudrait-il le spécifier d'une manière un peu plus précise.
Si tu ne connais pas le langage C, il faut l'apprendre, et ça ne se fait pas en 5 minutes. Oui, le C est plus difficile que le VB. Mais il permet une meilleure maitrise et génère du code généralement très efficace. Par contre, la moindre erreur de codage est gravissime et il y a peu de contrôles. Il faut donc maitriser ce langage pour prétendre réaliser une application en C.
Il y a des livres, des sites, des tutoriels... (des références sur mon site).
En plus du langage lui même, il faut aussi que tu apprennes à maitriser les outils de développement qui vont avec.
NOTA : le code de Bad__day est correct (je crois reconnaitre une certaine 'patte' héhé), mais il est inutilement complexifié par la colorisation (qui rend l'éxécution peu claire). D'autre part, il y a des fautes d'orthographe difficilement supportables dans les textes...
Version révisée :
Code :
- #include <winsock2.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #define IP "127.0.0.1"
- #define PORT 2000
- int main (void)
- {
- int error;
- puts (" <[ Client Bad_Day ]>\n\n" );
- WSADATA WSAData;
- WSAStartup (MAKEWORD (2, 0), &WSAData);
- SOCKET sock = sock = socket (AF_INET, SOCK_STREAM, 0);
- if (sock != INVALID_SOCKET)
- {
- printf (":-) Socket %d is now opened in TCP/IP mode.\n", sock);
- SOCKADDR_IN sin;
- sin.sin_addr.s_addr = inet_addr (IP);
- sin.sin_family = AF_INET;
- sin.sin_port = htons (PORT);
- error = connect (sock, (SOCKADDR *) & sin, sizeof sin);
- if (error != SOCKET_ERROR)
- {
- char bufferSend[50];
- char bufferRecv[50];
- int go = 1;
- printf (":-) Connected to server...\n\n" );
- do
- {
- printf ("CLIENT > " );
- fflush (stdout);
- fgets (bufferSend, sizeof bufferSend, stdin);
- error = send (sock, bufferSend, strlen (bufferSend), 0);
- printf
- ("\nAttente de la reponse du serveur (patientez svp)....\n\n" );
- if (error != SOCKET_ERROR)
- {
- error = recv (sock, bufferRecv, sizeof (bufferRecv) - 1, 0);
- if (error == SOCKET_ERROR)
- {
- go = 0;
- }
- else
- {
- bufferRecv[error] = '\0';
- printf ("SERVER < %s\n", bufferRecv);
- fflush (stdout);
- }
- }
- else
- {
- go = 0;
- }
- }
- while (go);
- printf ("::::: send impossible, closing socket...\n" );
- closesocket (sock);
- printf ("::::: Socket %d is new closed.\n", sock);
- }
- else
- {
- printf (":-/ Not connected ! connection failure.\n" );
- return EXIT_FAILURE;
- }
- }
- else
- {
- printf (":-/ Invalid Socket. Socket is not opened.\n" );
- return EXIT_FAILURE;
- }
- WSACleanup ();
- system ("pause" );
- return EXIT_SUCCESS;
- }
|
Message édité par Emmanuel Delahaye le 18-01-2007 à 11:31:07 ---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
|