PROTOCOLE TCP/IP - CLIENT/SERVEUR - [C++] [GCC]

Messages postés
67
Date d'inscription
vendredi 28 décembre 2001
Statut
Membre
Dernière intervention
23 juin 2015
- - Dernière réponse : LiaGalanodel
Messages postés
19
Date d'inscription
mercredi 3 mars 2010
Statut
Membre
Dernière intervention
29 juillet 2010
- 28 avril 2010 à 10:17
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/9951-protocole-tcp-ip-client-serveur-c-gcc

JMGR
Messages postés
67
Date d'inscription
vendredi 28 décembre 2001
Statut
Membre
Dernière intervention
23 juin 2015
-
Whah il est vraiment bien ton code !
Bon courage pour la suite ;)
J.M.G.R
cs_pepet
Messages postés
34
Date d'inscription
lundi 11 mars 2002
Statut
Membre
Dernière intervention
21 janvier 2003
-
c dans kel .h perror(...)?
Niko2012
Messages postés
17
Date d'inscription
lundi 8 juillet 2002
Statut
Membre
Dernière intervention
22 janvier 2004
-
salut pepet,
perror est tout simplement dans stdio.h ...
voila, bon code ^_^
yacinek
Messages postés
2
Date d'inscription
lundi 13 janvier 2003
Statut
Membre
Dernière intervention
16 janvier 2003
-
je voulais savoir si je pouvais utiliser se serveur sous visual c++ ?
il y aurais aucun problème?
Niko2012
Messages postés
17
Date d'inscription
lundi 8 juillet 2002
Statut
Membre
Dernière intervention
22 janvier 2004
-
Bien sûr! Ya aucun problème :)
et si tu as des questions, tu n'hésites pas... tu veux faire quoi comme genre de serveur?
cs_norton
Messages postés
215
Date d'inscription
mardi 21 janvier 2003
Statut
Membre
Dernière intervention
21 août 2011
-
serai t il possible de crée un serveur qui communiquerai pas le port 80
pour qu il ne soit pas refusé par les firewall ?

merci
cs_norton
Messages postés
215
Date d'inscription
mardi 21 janvier 2003
Statut
Membre
Dernière intervention
21 août 2011
-
serai t il possible de crée un serveur qui communiquerai pas le port 80
pour qu il ne soit pas refusé par les firewall ?

merci
Niko2012
Messages postés
17
Date d'inscription
lundi 8 juillet 2002
Statut
Membre
Dernière intervention
22 janvier 2004
-
Evidement c'est possible! tu remplaces 13 par 80 dans le serveur!! ;)
Ou alors tu ouvres le port que tu as déclaré sur ton firewall... c'est toi qui voit, en fonction de tes acces
cs_saibou
Messages postés
2
Date d'inscription
lundi 27 janvier 2003
Statut
Membre
Dernière intervention
8 janvier 2004
-
salut tout le monde! j'ai beau chercher sur la toile un code source sur la programmation client/serveur + sockets en C++ avec gestion d'erreurs, trames ... j'en trouve pas!
Soyez généreux, quels sont les tuaux??
Merci d"avance
gooopil
Messages postés
3
Date d'inscription
mercredi 12 mars 2003
Statut
Membre
Dernière intervention
19 juillet 2004
-
Bien, très bien même. Je cherchais un code simple pour pouvoir dévelloper un truc simple, c'est exactement ce qu'il me fallait :D
cs_Narcissus
Messages postés
15
Date d'inscription
mardi 8 juillet 2003
Statut
Membre
Dernière intervention
9 avril 2008
-
salut, je suis un debutant en Socket et j'ai besoin des fichier d'en tete utilisés , merci
10/10
cs_Narcissus
Messages postés
15
Date d'inscription
mardi 8 juillet 2003
Statut
Membre
Dernière intervention
9 avril 2008
-
je n'ai encore rien reçu , merci
Niko2012
Messages postés
17
Date d'inscription
lundi 8 juillet 2002
Statut
Membre
Dernière intervention
22 janvier 2004
-
yop! j'etais en vacances... ^_^
les fichiers d'entete sont ceux par defaut sous Linux... il existe des equivalents sous Windows..
cs_xenan
Messages postés
20
Date d'inscription
dimanche 22 décembre 2002
Statut
Membre
Dernière intervention
29 avril 2008
-
salut a tous!
g un ptit probleme sous VC++ 6.
il reconé pas <sys/types.h> é <sys/socket.h>
j'imagine ki ya leurs ekivalent ?
octet70
Messages postés
1
Date d'inscription
lundi 3 novembre 2003
Statut
Membre
Dernière intervention
12 novembre 2003
-
oui moi c'est pareil avec visual !!! j'aimerais bien avoir les equivallances si qqun les connais .... je suis novice ;)
merci ++
Entropede
Messages postés
2
Date d'inscription
samedi 21 juin 2003
Statut
Membre
Dernière intervention
13 novembre 2010
-
Bravo ! Il y si longtemps que je cherche un code simple pour développer toutes sortes de choses. Et moi aussi je suis très intéressé de connaître les codes sources qui permette de créer ces socket sous windows. Je n'ai pas essayé encore, mais je le ferai sous DevCpp ce soir même :P.

Encore bravo Niko ! C'est surper fin de ta part !
derbiman10
Messages postés
11
Date d'inscription
lundi 13 janvier 2003
Statut
Membre
Dernière intervention
9 février 2006
-
je croit que pour les socket sous windows c'est c genre de truque a déclarer en plus mais il y a de bonne source ici sur les socket windows

#include <winsock.h> ou #include <winsock2.h>
#pragma comment(lib,"ws2_32.lib")

SOCKET socket;
SOCKADDR_IN sin;
WSADATA wsadata;

moi meme je debut en c++ mais je code sous linux avec les socket donc si je me trompe réctifier l'erreur
GhostLord
Messages postés
1
Date d'inscription
mercredi 8 octobre 2003
Statut
Membre
Dernière intervention
7 janvier 2004
-
Pas mal le code!
Je recherche des exemples de programmes, sur les clients / serveurs pour un salon de discussion.
De préférence en O'Caml ou Java.
Merci.
niko2013
Messages postés
1
Date d'inscription
samedi 24 janvier 2004
Statut
Membre
Dernière intervention
24 janvier 2004
-
Heu pareil que Narcissus, je voudrais bien pouvoir le compiler mais il ne reconnait pas les fichiers d'en tete... Je développe sous Dev CPP.

Merci d'avance !
cs_YaNn0u
Messages postés
48
Date d'inscription
lundi 6 janvier 2003
Statut
Membre
Dernière intervention
27 avril 2005
-
Salut,
Tout d'abord bravo pour ta source, elle est vraiment chouette !
Je voulais savoir si le client doit etre forcement coder en c/c++ pour pouvoir communiquer avec ton serveur ( car javais coder des salons en vb ou je suis un initié ce qui nest pas le cas en c++ ! )
De plus, peut-on lancer ce serveur sur un shell linux, si oui comment ?

Merci d'avance !
Niko2012
Messages postés
17
Date d'inscription
lundi 8 juillet 2002
Statut
Membre
Dernière intervention
22 janvier 2004
-
ni le client ni le serveur ne doivent etre obligatoirement codés en C++
la communication se fait par le protocole TCP/IP, libre à toi ensuite de faire par exemple un équivalent du client en java. il faudra par contre faire attention au fait que tu ne pourras plus envoyer d'objets ou de classes sérialisées et les récupérer "directement" de l'autre coté: tu devras toi-meme gérer le 'decodage' des paquets recus..

pour lancer le serveur sur linux, il suffit de compiler la source et de l'exécuter... les librairies inclues sont celles de Linux justement..
Niko2012
Messages postés
17
Date d'inscription
lundi 8 juillet 2002
Statut
Membre
Dernière intervention
22 janvier 2004
-
Désolé, mais il n'a rien à faire ici..
cs_miky28
Messages postés
2
Date d'inscription
samedi 12 juin 2004
Statut
Membre
Dernière intervention
29 décembre 2004
-
salut a tous

J'aimerai savoir si c possible de faire la parti client en C++
si possible esseyer de me filler les commende que je devrait utiliser pour arriver a met fin

merci a tous
@++

ps: je suis un newbie de la mort qui tu donc allez y molo
albator2004
Messages postés
3
Date d'inscription
lundi 21 juin 2004
Statut
Membre
Dernière intervention
25 juin 2004
-
Bonjour!!

Voilà je recherche de la doc sur la manière de configurer une archi 3-tier avec quel langage de dev utiliser. (plus exmples ci-possibles...)

Merci à tous!

P.S C'est mon 1er post sur ce site.
byfrost
Messages postés
1
Date d'inscription
jeudi 6 mai 2004
Statut
Membre
Dernière intervention
22 juin 2004
-
salut
je voulais savoir si ton serveur pouvait accepter plusieurs clients a la fois ou si il naccepte qune seule connexion
Si non ke faudrait il modifier
c en fait pour ce servir de ton code pour faire un logiciel de Tchat
Merci d'avance
CptLuthor
Messages postés
25
Date d'inscription
dimanche 7 novembre 2004
Statut
Membre
Dernière intervention
9 décembre 2004
-
Salut

Quand on est conecté avec un pot client et moi server, peut t on se voir en réseau, c a d se voir dns les jeux par exemple ?

merci
worms4
Messages postés
27
Date d'inscription
jeudi 29 avril 2004
Statut
Membre
Dernière intervention
20 mars 2007
-
j'ai limpression qu'il n'y a qu'avec moi que sa ne marche pas. Impossible de le compiler. J'utilise Dev C++ ca ne marche aps. Je l'ai test sous visual et par contre la c'est bon. Ne voulant pas coder sous visual j'ai pensser que ca venais des .h j'ai essayer de les changé avec ceux de visual et la toujour pas........ Aider moiiiiiiiiiiiiiiiiiiiiiiiiii svp
ilemporio
Messages postés
1
Date d'inscription
vendredi 28 janvier 2005
Statut
Membre
Dernière intervention
28 janvier 2005
-
est ce que ce source fonctionne avec Borland C++ Builder 6?
djwarrior28
Messages postés
2
Date d'inscription
lundi 15 décembre 2003
Statut
Membre
Dernière intervention
1 février 2005
-
le code est pas mal, cependant
INADDR_ANY ne signifie pas forecement que le srv va accepter une connection mais que tu n'as pas besoin de specifier une @ ip car cette fonction recupere automatiquement celle de ta machine srv
cs_aketus
Messages postés
3
Date d'inscription
mardi 13 juin 2006
Statut
Membre
Dernière intervention
29 janvier 2008
-
Pas mal ce code pour débuter avec les socket!

Par contre lors de la compilation il met :
serveur.c: In function ?main?:
serveur.c:31: warning: incompatible implicit declaration of built-in function ?exit?

Et en mettant #include <stdlib.h> ca va beaucoup mieux!!!

Par contre la question concernant la multi-connexion m'intéresse donc si quelqu'un à la réponse?
D'aprés le code il est mono connexion et lorsqu'il a donné l'heure il se remet en attente (boucle infinie)
Je suppose qu'il faudrait donc créer des threads.

Merci.
Niko2012
Messages postés
17
Date d'inscription
lundi 8 juillet 2002
Statut
Membre
Dernière intervention
22 janvier 2004
-
Bonjour Aketus et merci pour le commentaire :)

Bien sûr, tu suppose bien, il suffit de threader la gestion des clients après leur connexion, pour faire du multi-client.
Il s'agit d'un exemple très simple pour illustrer la gestion des sockets en C++

Niko.
cs_aketus
Messages postés
3
Date d'inscription
mardi 13 juin 2006
Statut
Membre
Dernière intervention
29 janvier 2008
-
Tiens j'ai fait une version multithreads, simple :



#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <sys/un.h>
#include <stdio.h>
#include <stdlib.h>

#include "pthread.h"


#define MAXLINE 4096
#define MASOCKET 2000
#define MAXTHREAD 10

int listenfd, connfd;
struct sockaddr_in servaddr;
char buff[MAXLINE];
time_t tics;

void *connexion (void *param);
void socket_connect (void);


int main(int argc, char **argv)
{
int numthread=0;
pthread_t thread[MAXTHREAD];

socket_connect();

while (1)
{ //boucle infinie, faut-il le preciser ? :oD
if (numthread < MAXTHREAD)
{
pthread_create(&thread[numthread], NULL, connexion, NULL);
printf("Thread Numéro %d\n",numthread+1);
}
else
{
printf("Nombre de thread maximum atteint\n");
while(1);
//exit(0);
}
numthread++;
}
exit(EXIT_SUCCESS);
}


/********************************************************************************/
/* Fonction de création de sockets */
/********************************************************************************/


void socket_connect (void)
{
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
}
//return 0;
}



/********************************************************************************/
/* Thread de connexion au client */
/********************************************************************************/


void *connexion (void *param)
{
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 ;)
}
//while(1){};
close(connfd);
pthread_exit (0);
}

Par contre ca prend 100% du proc donc avec des sleep dans chaque thread ca peut le faire mais c'est pas très beau.
Si quelqu'un à une meilleure idée?

Par contre lors de l'édition des liens il faut faire :
gcc -lpthread -o serveur-test serveur-test.o
Sinon ça passe pas.

Niko2012 si tu veut je t'envoi les sources et le make file qui va bien?

Aketus
kerneltony95
Messages postés
152
Date d'inscription
dimanche 22 janvier 2006
Statut
Membre
Dernière intervention
26 mars 2007
-
oui bonne idée niko plus tard je ferai un server avec identification ^^
djgamix
Messages postés
2
Date d'inscription
mercredi 15 mars 2006
Statut
Membre
Dernière intervention
29 janvier 2008
-
Voila beau code sourcee!


par contre si quelqun pourais maider je copi et je colle le code source

dans dev c++ et ca me marque plusieurs erreur lors de la compilation me manke t-il des librairies aide SVP


sys/socket.h: No such file or directory
netinet/in.h: No such file or directory
sys/un.h: No such file or directory
In function `main':
storage size of 'servaddr' isn't known
AF_INET' undeclared (first use in this function)
(Each undeclared identifier is reported only once for each function it appears in.)
`SOCK_STREAM' undeclared (first use in this function)
`INADDR_ANY' undeclared (first use in this function)
Makefile.win [Build Error] [main.o] Error 1


!!voila toutes les erreurs!!

si quelqun pourait prendre un peut de son temp pour m'expliquer d'ou viennent ces erreurs ca me
serais d'une grande aide

merci de répondre
cs_aketus
Messages postés
3
Date d'inscription
mardi 13 juin 2006
Statut
Membre
Dernière intervention
29 janvier 2008
-
Je suppose que comme tu utilise dev c++ tu es sous windows?

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
djgamix
Messages postés
2
Date d'inscription
mercredi 15 mars 2006
Statut
Membre
Dernière intervention
29 janvier 2008
-
re

mais sous Windows sa ne serais pas Winsock.h plutôt ?

comment puis-je trouver ces header et lib ?
cs_chabalou
Messages postés
1
Date d'inscription
mercredi 20 février 2008
Statut
Membre
Dernière intervention
22 février 2008
-
Aketus, je reprend ton code pour un projet et je te remercie de l'avoir mis à disposition. Le truc est --forcément comme tu l'as souligné-- le problème de l'utilisation du cpu. Je ne m'y connais pas assez pour remedier à ce problème alors si quelqu'un trouve une solution ... ^_^
cs_ayoub718
Messages postés
1
Date d'inscription
dimanche 7 décembre 2008
Statut
Membre
Dernière intervention
12 décembre 2009
-
merci bcp mé ilya des problemes avec dev++, les erreurs indique que qlq fonction ne fonctione pas?
LiaGalanodel
Messages postés
19
Date d'inscription
mercredi 3 mars 2010
Statut
Membre
Dernière intervention
29 juillet 2010
1 -
Vraiment bien ce code.
A essayer!
Merci ;)