Canevas serveur unix ( linux) v1.0

Contenu du snippet

Ce canevas serveur permet de cree un serveur sous unix
il faut bien sur lui ajouter les fonctions que vous souhaiter -- exemple serveur echo,chat,donnees .....

Source / Exemple :


// Ecrits par NiChaN  --- ***The EaTo By NiChaN***
// www.EaTo.fr.st
// 22/06/2002 
// Petit canevas de serveur unix
// ici il fonctionne en temps que serveur d'echo
// mais peut tous a fait etre utilise pour une application plus grande
// comme un serveur de discution : CHAT 
// ou bien un serveur de stockage de donnée !
// Utilisation mode console :
// Cree des fonctions avec renvoye de valeur si vous desirer l'utiliser en mode graphique !
#include <errno.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <linux/in.h>
#include <netdb.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <signal.h>
#include <stdio.h>

int main (int argc ,char* argv[])
{
long int retour;
FILE* pfile;
struct sockaddr_in sin, from;
struct servent *sp;
struct hostent *hp;
int s;
char buffer[100];
char *taille;
char *pfichier;
int test;

   bzero ((char*) &sin, sizeof sin);
   sin.sin_family = AF_INET;
   sin.sin_port = htons (9999);
   if ((s= socket (AF_INET, SOCK_STREAM, 0)) <0)
   {
     perror ("socket");
     exit (1);
   }
   if (bind (s,(struct sockaddr*) &sin, sizeof(sin)) < 0)
   {
     perror ("bind");
     exit (2);
   }
 listen (s,4);
 for(;;)
  {
  int g,len;

  len = sizeof from;
  g = accept (s,(struct sockaddr*) &from, &len);
  if (g < 0)
   {
     perror ("accept");
     continue;
   }
  switch (fork ())
    {
    case -1:
      perror ("fork");
      exit (3);

    case 0:
      close (s);
/* Service rendu */
	recv(g,buffer,sizeof(buffer),0);
	pfile=fopen(buffer,"r");
	 if(pfile==NULL)
	 {
	     printf("le fichier n' existe pas!!!");
	    	retour=-1;
	    	exit(0);
	 }     
	fseek(pfile,0L,SEEK_END);
	retour=ftell(pfile);
	taille=fread(taille,buffer,sizeof(buffer),pfile);
	printf("retour : %d\nfichier :%s\ncontenu du fichier : %d\n",retour,
			buffer,taille);
	fflush(stdout);
///*********** TouTe MoDiFiCaTiOn a effectuer ICI : *******************//
// SERVEUR ECHO : exemple ::
	send(g,&retour,sizeof(retour),0);	 	
	
	send(g,&pfile,sizeof(retour),0);

//......................................//..........................
		
      close(g);
      exit (0);

    default:
      close(g);
    }
  
  }
}

Conclusion :


Aucun bug connu a ce jour , si vous en avez un ; Merci de me le faire parvenir!!

A voir également

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.