Soyez le premier à donner votre avis sur cette source.
Snippet vu 75 418 fois - Téléchargée 37 fois
///////////////////////// Client tcp - by Nik^o^ - //////////////////////////// #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <sys/un.h> #include <stdio.h> #define MAXLINE 4096 #define MASOCKET 13 //socket habituellement utilise pour un daytime serveur //si l'acces est refuse, essayer avec un socket > 1023 (ex: 1111) int main(int argc, char **argv) { int sockfd, n; char recvline[MAXLINE + 1]; struct sockaddr_in servaddr; if (argc != 2){ perror("usage: a.out <IPaddress>"); exit(1); //si le nombre de parametres n'est pas correct... } if ( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0){ //la fonction socket cree un socket de flux (SOCK_STREAM)internet(AF_INET) //(incomprehensible en francais)(plus simplement : Internet stream socket). //Renvoit un int pour identifier le socket plus tard (cf. read & connect) perror("socket error"); exit(1); //si ca foire... } bzero(&servaddr, sizeof(servaddr)); //on met toute la structure a 0 //on remplit la structure avec l'ip du serveur et le num de son port servaddr.sin_family = AF_INET; servaddr.sin_port = htons(MASOCKET); //htons: pour convertir le numero de port if (inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <= 0){ //inet_pton: convertit l'argument ASCII (Ex: 127.0.0.1) dans le bon format perror("inet_pton error"); exit(1); //de meme, si ca foire... } if (connect(sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr)) < 0){ //connect etablit la connection TCP avec le serveur specifie par la structure de //l'adresse du socket pointe par le second argument perror("connect error"); exit(1); //idem } while ( (n = read(sockfd, recvline, MAXLINE)) > 0) { //lit la reponse du serveur et ecrit le resultat recvline[n] = 0; //null terminate if (fputs(recvline, stdout) == EOF){ perror("fputs error"); exit(1); } } if (n < 0){ //s'il y a eu un probleme pendant la lecture... perror("read error"); exit(1); } exit(0); } ///////////////////////// Serveur tcp - by Nik^o^ - //////////////////////////// #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <sys/un.h> #include <stdio.h> #define MAXLINE 4096 #define MASOCKET 13 int main(int argc, char **argv) { int listenfd, connfd; struct sockaddr_in servaddr; char buff[MAXLINE]; time_t tics; if ( (listenfd = socket(AF_INET, SOCK_STREAM, 0)) < 0 ){ //meme chose que pour le client perror("socket error"); exit(1); //et si ca foire ! } bzero(&servaddr, sizeof(servaddr)); //meme chose que pour le client servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = htonl(INADDR_ANY); //INADDR_ANY signifie que le serveur va accepter une connection //client sur n'importe-quelle interface servaddr.sin_port = htons(MASOCKET); //on lie le port du serveur au socket en remplissant la "internet socket //adresse structure" et en appellant bind if (bind(listenfd, (struct sockaddr *) &servaddr, sizeof(servaddr)) < 0){ perror("bind error"); exit(1); //au cas ou... } if (listen(listenfd, 5) < 0){ //avec listen, le socket est converti en listening socket (ecoute) //sur lequel les demandes de connections vont etre acceptees par le Kernel perror("listen error"); exit(1); //ca peut merder aussi ici } while (1){ //boucle infinie, faut-il le preciser ? :oD if ( (connfd = accept(listenfd, (struct sockaddr *) NULL, NULL)) < 0){ //accept retourne un "descripteur de connection" (connected descriptor) qui est //utilise pour la communication avec le nouveau client. Un nouveau pour chaque client perror("accept error"); exit(1); //et aussi ici } tics = time(NULL); snprintf(buff, sizeof(buff), "%.24s\r\n", ctime(&tics)); //on recupere la date et l'heure if (write(connfd, buff, strlen(buff)) < 0){ //et on envoit le tout au client ! perror("write error"); exit(1); //de meme ;) } close(connfd); } }
28 avril 2010 à 10:17
A essayer!
Merci ;)
12 déc. 2009 à 01:40
22 févr. 2008 à 07:37
29 janv. 2008 à 23:31
mais sous Windows sa ne serais pas Winsock.h plutôt ?
comment puis-je trouver ces header et lib ?
29 janv. 2008 à 10:12
Sous linux tu as un répertoire /usr/include/... qui contient les headers et /usr/lib/.. qui contient les libs.
Il doit donc y avoir un équivalent sous windows, fait donc unn recherche sur le fichier socket.h et si tu le trouves vérifie que le path est ajouté à dev c++ et sinon fait en sorte d'ajouter les libs et les headers. Mais je pense que ce sont des include de base donc je soupçonne une mauvaise configuration de ton IDE.
A+
Aketus
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.