IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Réseau C Discussion :

[SOCKET] TCP client/serveur


Sujet :

Réseau C

  1. #1
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 2
    Points : 3
    Points
    3
    Par défaut [SOCKET] TCP client/serveur
    salut tout le monde
    j'aimerai implimenter un code source en c sous linux en utilisant les socket de façon a crée un client/serveur qui s'échange des fichiers
    voici mon programme (soit il ne marche pas ou bien je ne sait pas comment le faire marcher ,mais je n'ai pas traiter l'échange des fichier j'ai juste volu des échange des message mais je ne sais pas comment m'y prendre )
    coté server:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    int main(int argc,char * argv[])
    {
     
    	int sock,sock_ecoute;
    	struct sockaddr_in  serveur={0},csin={0};
    	int taille,lengeur_inet;
    	int nbr_ecoute=5;
    	char buf[1025];
    	if (argc!=1) printf("MSG");
    	sock=socket(AF_INET,SOCK_STREAM,0);
    	if (sock==-1) msg_erreur("Creation de la socket a echouer");
    	serveur.sin_family=AF_INET;
    	serveur.sin_port=htons(PORT);
    	serveur.sin_addr.s_addr=htonl(INADDR_ANY);
    	if (bind(sock,(struct sockaddr *)&serveur,sizeof(serveur))==-1) msg("attachement de socket a echouer",sock); 
    	listen (sock,nbr_ecoute);
    	lengeur_inet=sizeof (struct sockaddr_in);
    	while (1)
    	{
    		int resc=(int) sizeof csin;
    		sock_ecoute=accept(sock_ecoute,(struct sockaddr *) & csin,& resc);
    		taille=recv(sock,& buf,sizeof(buf),0);
    		buf[taille]='\0';
    		printf("%s",buf);
     
    	}
    	printf("une connection est accepter %d,from %s :%d\n",sock_ecoute,inet_ntoa(csin.sin_addr),htons (csin.sin_port));
    }
    coté client
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    int main(int argc,char * argv[])
    {
     
    	int sock,bin,conecter;
    	char msg_envoyer[1025];
    	char buf[1025];
    	struct sockaddr_in local , serveur;
    	int lg,taille;
    	char car;
    	struct hostent *h=gethostbyname(argv[1]);
    	sock=socket(AF_INET,SOCK_STREAM,0);
    	//la création de la socket a echoue//
    	if (sock==-1) msg_erreur("Creation de la socket a echouer");
    	//local 
    	local.sin_family=AF_INET;
    	local.sin_port=htons(0);
    	local.sin_addr.s_addr=htonl(INADDR_ANY);
     
    						/*attachement de la socket*/
    	// si attachement de la socket a echoue//
    	if (bind(sock,(struct sockaddr *)&local,sizeof(struct sockaddr))==-1) msg("attachement de socket a echouer",sock); 
    	//serveur
    	serveur.sin_family=AF_INET;
    	serveur.sin_port=htons(atoi(argv[2]));
    	bcopy(h->h_addr,(char*)& serveur.sin_addr.s_addr,h->h_length);
    	lg=sizeof(serveur);
    						/*la connection au serveur*/
    	if (connect(sock,&serveur,lg)==-1) msg("connection:failed\n",sock);
    	printf(" TRING : %s.....\n ",inet_ntoa(serveur.sin_addr));
    						/*envoyer le msg*/
    	taille=send(sock,"BONJOUR",strlen("BONJOUR"),0);
    	if (taille==-1) msg("msg non envoyer",sock);//echec d'envoye
    						/*reception de la reponce (serveur)*/ 
    	while(1)
    	{
    		taille=recv(sock,& buf,sizeof(buf),0);
    		buf[taille]='\0';
    		printf("%s",buf);
    		if ((taille==0)||(recv==-1)) break;
    	}
    	printf("\n");
    						/*deconnection*/
    	printf("connection:close\n");
    	close(sock);
    	return 0;
     
    }
    sachant que msg et msg_erreur se sont deux procedure pour afficher le message d'erreur
    bien sur j'ai utiliser les header
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #include<sys/socket.h>
    #include<sys/types.h>
    #include<netinet/in.h>
    #include<netdb.h>
    #include<stdio.h> 
    #include<unistd.h> 
    #include<string.h>

    merci de m'aider et j'aimerai bien savoir comment les éxecuter

    bonne journée

  2. #2
    Membre à l'essai
    Inscrit en
    Octobre 2006
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 21
    Points : 18
    Points
    18
    Par défaut
    Bonjour.

    Ce site propose un bon tutoriel pour le réseau. Et ça marche plutôt bien, même en copiant-collant bêtement.
    Ce que tu devrais commencer par faire, avec ton code, ce de regarder la documentation de chaque fonction réseau que tu utilises. C'est important de savoir comment ça marche, sinon tu vas assurément te planter.

    Par exemple, "send" et "recv" sont capables d'envoyer tout un tas de type de données différentes, pourvus que tu lui passes un pointeur vers la donnée à envoyer/recevoir. (et non pas un pointeur de pointeur ou une chaine allouée sur le tas)

  3. #3
    Expert confirmé Avatar de fregolo52
    Homme Profil pro
    Développeur C
    Inscrit en
    Août 2004
    Messages
    2 366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Août 2004
    Messages : 2 366
    Points : 5 382
    Points
    5 382
    Par défaut
    Je ne sais pas comment doit marcher ton programme mais il doit obligatoirement être multithread avec les fonctions send et recv.

    To client et ton serveur sont en permanence en attente, le 1er attend un message du serveur, le 2nd attend une connexion client (tes boucles while).

    Comme le dit Latoof, il y a un super cours sur ce site !!!

  4. #4
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    merci de me répondre ,je sé maintenant ou est l'erreur
    bonne journée

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. socket UDP client/serveur
    Par xokami35x dans le forum Entrée/Sortie
    Réponses: 8
    Dernier message: 10/06/2008, 19h57
  2. socket ipv6 (client/serveur)
    Par beLz dans le forum Réseau
    Réponses: 19
    Dernier message: 07/03/2007, 09h34
  3. [TCP] Client/Serveur avec les composants Indy
    Par bakaneko dans le forum C++Builder
    Réponses: 2
    Dernier message: 14/02/2007, 12h47
  4. [SOCKET] connexion client serveur avec applet
    Par kaiser2003 dans le forum Applets
    Réponses: 2
    Dernier message: 06/10/2004, 22h32
  5. [Routeur/Socket] Connection Client/Serveur
    Par Clorish dans le forum Développement
    Réponses: 3
    Dernier message: 17/12/2003, 13h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo