begin process at 2012 05 30 17:32:21
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Linux

 > 

Autre

 > 

socket


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

socket

samedi 27 novembre 2010 à 16:41:21 | socket

snoopydev

salut qui peut m'aider j'ai un mini projet pour réaliser une simple calculatrice avec deux opérandes de type entier avec les socket en c
mercredi 1 décembre 2010 à 10:27:15 | Re : socket

sarlissa

bonjour, je travaile sur un programme de socket qui réalise le transfert de fichier:
-L'utilisateur se conecte au serveur en mode non conecté pour choisir le mode de transfert s'il veut continuer en mode non conecté le transfert s'efectue sinon il se deconecte pour reconecter en mode conecter et puis reçevoir le fichier.
-Le serveur gère 5 utilisateurs a la fois avec la fonction fork.

en fait mon problème et comme suite:
dabord dans quand j'execute mon code et je choisie le mode conécté on me donne une erreur de conection,et quand je choisie le mode non conecté le transfert nesetermine jamais.et pourtant les deux programe conecté et non conécté s'exécute a la perfection quant ils sont isolé.
si quelqu'un pourais m'aider je serais très reconnaisante.
voici mon code:
serveur:
Code C/C++ :
//COD C SERVEUR DANS DOMAINE INTERNET
#include<stdio.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<string.h>
#include <sys/wait.h>
#include <stdlib.h>
void conecte(char**);

 //*****************variables globales:
 int sockfd,newsockfd,clilen,max=250; 
static struct sockaddr_in loc_addr, cli_addr;
char recvline[256]="",fichier[20],mode;
FILE *fich2;


 

main(int argc, char * argv[])
{//pid_t pid;

int i=1,etat,ret_fils,pid;
for(i=1;i<=5;i++)
{
pid=fork();

if(pid==0)
{  printf
	("\t\t\t\t********\n\t\t\t\t* FILS *	\n\t\t\t\t********\n");
      
   loc_addr.sin_family=AF_INET;
   loc_addr.sin_addr.s_addr=htonl(INADDR_ANY);
   loc_addr.sin_port=htons(atoi(argv[1]));//ou htons(NUMPORT)

   clilen=sizeof(cli_addr);
 //************************************

  
                                 

   //*********************mode non conecté

 {
if((sockfd=socket(AF_INET,SOCK_DGRAM,0))<0)
		printf("error socket\n");
	else{
		printf("le numéro de port est %s\n",argv[1]);
		unlink(sockfd);

		if(bind(sockfd,(struct sockaddr *)&loc_addr,sizeof(loc_addr))<0)
			perror("bind");
		else{
                       
			clilen=sizeof(cli_addr);



   		      recvfrom(sockfd,&mode,1,0,(struct sockaddr *)&cli_addr,&clilen);
   		       
                        
   		        //**************************si l'utilisateur souhaite rester en mode non conecté: 
                        if(mode!='g' && mode!='G')
                        {recvfrom(sockfd,&mode,1,0,(struct sockaddr *)&cli_addr,&clilen);
       			//*******************************************************
      			 recvfrom(sockfd,fichier,sizeof(fichier),0,(struct sockaddr *)&cli_addr,&clilen);
 	    		if(fich2=fopen(fichier,"r+"))printf("ouverture de fichier reussi\n");
    			else printf("erreur ouvertur fichier\n");
     
    			printf("debut de transfert de fichier ...\n"); 
       			//*******************************************************
       			//*****************fichier texte:
			if(mode=='t' || mode=='T')
			{
				do{      
	        
					fgets(recvline,256,fich2);
					sendto(sockfd,recvline,sizeof(recvline),0,(struct sockaddr *)&cli_addr,clilen);
	
				}while(!feof(fich2));// && !ferror(fich2));

				sendto(sockfd,"FIN",sizeof("FIN"),0,(struct sockaddr *)&cli_addr,clilen);
				printf("fin de transfert\n");
			}
    			 //******************fichier binaire
			else 
			{
				do{     	        
					fread(recvline,256,1,fich2);
					sendto(sockfd,recvline,sizeof(recvline),0,(struct sockaddr *)&cli_addr,clilen);
	
				}while(!feof(fich2) && !ferror(fich2));

				sendto(sockfd,"FIN",sizeof("FIN"),0,(struct sockaddr *)&cli_addr,clilen);
				printf("fin de transfert\n");
			}
		        //************fin fichier binaire
		        fclose(fich2);
		        close(newsockfd);
                }
		
        }
	}
  if(mode=='s' || mode=='S')
  conecte(argv);
}

i++;}
else if(pid==-1){printf ("Le fork a echoue");
      exit(2);}
}
printf("********\n* PERE *\n********\n"); 
      ret_fils = wait (&etat);

}




//***********************si l'utilisateur souhaite le mode conecté:
void conecte(char **argv)
{	
        loc_addr.sin_family=AF_INET;
        loc_addr.sin_addr.s_addr=htonl(INADDR_ANY);
        loc_addr.sin_port=htons(3333);//ou htons(atoi(argv[1]));

clilen=sizeof(cli_addr);
 //************************************
 close(sockfd);//fermeture du mode non conecté

        //***********création de socket
	if((sockfd=socket(AF_INET,SOCK_STREAM,0))<0)
		printf("error socket\n");
          unlink(sockfd);


	


	if(bind(sockfd,(struct sockaddr *)&loc_addr,sizeof(loc_addr))<0)
		perror("bind");


	else{
		listen(sockfd,5);
              
		

		newsockfd=accept(sockfd,(struct sockaddr *)&cli_addr,&clilen);
		if (newsockfd<0) {printf("accept error\n");}
		else{
			   printf("connection acceptee\n");


		       
       			//*******************************************************
      			read(newsockfd,fichier,20); 
			    if(fich2=fopen(fichier,"r+"))printf("ouverture de fichier reussi\n");
                            else printf("erreur ouvertur fichier\n");      
    				printf("debut de transfert de fichier ...\n");
		       //*******************************************************
		       //*****************fichier texte:
			if(mode=='t' || mode=='T')
			{
    
				do{      
	        
					fgets(recvline,256,fich2);
					write(newsockfd,recvline,sizeof(recvline));
	
				}while(!feof(fich2));
				write(newsockfd,"FIN",sizeof("FIN"));
				fclose(fich2);
			}
		    //******************fichier binaire:
			else
			{
				do{      
	        
					fread(recvline,256,1,fich2);
					write(newsockfd,recvline,sizeof(recvline));
	
				}while(!feof(fich2) && !ferror(fich2));

				write(newsockfd,"FIN",sizeof("FIN"));
                                printf("fin de transfert\n");
			}
                        fclose(fich2);
		        close(newsockfd);
		}
	}
    }

client:
Code C/C++ :
//COD C CLIENT DANS DOMAINE INTERNET

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include<stdio.h>
#include<string.h>
void conecte(char**);

//************************variable globales:
int sockfd,servlen,b=1;
FILE *fich1;
struct sockaddr_in serv_addr;
char sendline[256]="",fichier[20],fichier1[20],c,mode;
//****************************************


 

main(int argc,char** argv)
{


serv_addr.sin_family=AF_INET;
serv_addr.sin_addr.s_addr=inet_addr(argv[2]);//ou inet_addr(" 127.0.0.1")
serv_addr.sin_port=htons(atoi(argv[1]));


  
 //*********************mode non conecté:
 
if((sockfd=socket(AF_INET,SOCK_DGRAM,0))<0)
printf("erreur creation de socket\n");

else{
      servlen=sizeof(serv_addr);
      
        
      do{printf("si vous voulez transferer en mode conecté taper \"s\";si non taper \"g\":");
                 scanf("%c",&mode);
                 }while(mode!='S' && mode!='s' && mode!='G' && mode!='g');
                 write(sockfd,mode,sizeof(mode));
        sendto(sockfd,&mode,sizeof(mode),0,(struct sockaddr *)&serv_addr,servlen); 
        //**************************si l'utilisateur souhaite rester en mode non conecté: 
        if(mode=='g' || mode=='G')	
       {do{printf("si c'est un fichier texte taper \"t\";si non taper \"b\":");//choix du type de fichier à reçevoir
                 scanf("%c",&mode);
        }while(mode!='t' && mode!='T' && mode!='b' && mode!='B');
        sendto(sockfd,&mode,sizeof(mode),0,(struct sockaddr *)&serv_addr,servlen);//l'envois du type au serveur
        //*******************************************************
        printf("entrer le nom du fichier pour ecriture:");
        scanf("%s",fichier1);
	if(fich1=fopen(fichier1,"a+"))printf("ouverture de fichier reussi\n");
    	else printf("erreur ouvertur fichier\n");

        printf("entrer le nom du fichier a recharger:");
        scanf("%s",fichier);
        sendto(sockfd,fichier,sizeof(fichier),0,(struct sockaddr *)&serv_addr,servlen);
        
    	printf("debut de reception de fichier ...\n");      
       //*******************************************************
       //*****************fichier texte:
	if(mode=='t' || mode=='T')
	{       recvfrom(sockfd,sendline,sizeof(sendline),0,(struct sockaddr *)&serv_addr,&servlen);
		while(strcmp(sendline,"FIN")){	
                              fputs(sendline,fich1);
                              recvfrom(sockfd,sendline,sizeof(sendline),0,(struct sockaddr *)&serv_addr,&servlen);
		}
	}
	//******************fichier binaire:
	else
	{        recvfrom(sockfd,sendline,256,0,(struct sockaddr *)&serv_addr,&servlen);   
		 while(strcmp(sendline,"FIN")){
				
				fwrite(sendline,256,1,fich1);
				recvfrom(sockfd,sendline,sizeof(sendline),0,(struct sockaddr *)&serv_addr,&servlen);
		}
	}
      
    fclose(fich1); 
    printf("fin de reception\n");
  }

 close(sockfd); 
 
 } 
 if(mode=='s' || mode=='S') conecte(argv);
close(sockfd);
//else printf("option inconue!");
}




//***********************si l'utilisateur souhaite le mode conecté:
                               
void conecte(char **argv)
{
serv_addr.sin_family=AF_INET;
serv_addr.sin_addr.s_addr=inet_addr(argv[2]);//ou inet_addr(" 127.0.0.1")
serv_addr.sin_port=htons(3333);//htons(atoi(argv[1]));

 close(sockfd);//fermeture du mode non conecté

//**************reconection en mode conecté:

if((sockfd=socket(AF_INET,SOCK_STREAM,0))<0)
printf("erreur creation de socket\n");
else{
	if(connect(sockfd,(struct sockaddr *)&serv_addr,sizeof(serv_addr))<0)
		printf("error connexion\n");
		
		
	else{  do{printf("si c'est un fichier texte taper \"t\";si non taper \"b\":");
                 scanf("%c",&mode);
              }while(mode!='b' && mode!='t' && mode!='T' && mode!='B');     
                 write(sockfd,mode,sizeof(mode));
             //*******************************************************
             printf("entrer le nom du fichier pour ecriture:");
             scanf("%s",fichier1);
             printf("entrer le nom du fichier a recharger:");
             scanf("%s",fichier);
             write(sockfd,fichier,sizeof(fichier));
 if(fich1=fopen(fichier1,"a+"))printf("ouverture de fichier reussi\n");
    else printf("erreur ouvertur fichier\n");
    printf("debut de reception de fichier ...\n");      
       //*******************************************************
       //*****************fichier texte:
if(mode=='t' || mode=='T')
{
                read(sockfd,sendline,sizeof(sendline));
		while(strcmp("FIN",sendline)!=0){
				fputs(sendline,fich1);
                                read(sockfd,sendline,sizeof(sendline));
                                
		 }
	
}
	//******************fichier binaire:
else
{                       read(sockfd,sendline,sizeof(sendline));
			while(strcmp(sendline,"FIN")){
					fwrite(sendline,sizeof(sendline),1,fich1);
                                        read(sockfd,sendline,sizeof(sendline));
		              }

}
fclose(fich1);
printf("fin de reception\n");
}

}
close(sockfd);
}

note:le programme est sous linux
et merci d'avance


Cette discussion est classée dans : socket


Répondre à ce message

Sujets en rapport avec ce message

encore mon serveur [ par skysee ] bonjour,je suis toujours avec mon serveur en c sous visual c++ sous windows(sis eulement j'avais linux).Le problème est que je n'ai pas d'erreur de co Probleme reception sur un serveur windows en vc++ [ par alfred ] Salut a tous!!g un probleme dans mon serveur le recv renvoie la valeur -1 et je ne vois pas pouquoi, toute mes socket sont positives le client envois Serveur Vc++6 pb dans recv [ par alfred ] Salut a tousJ'ai un probleme dans mon serveur et je ne sais pas comment le resoudre. Le client se connecte bien et envoie le bon nombre de caracteres socket.h [ par greg4 ] je ne trouve pas socket.h !!!quelqu'un pourait me l'envoyer a ggreg4@caramail.comou me donner une address.merci socket en c [ par skysee ] Bonjour,je recherche un code en C (pas de c++) qui créer un serveur socket udp. Merci Communication par socket [ par yoyo2 ] Bonjour à tous,est-il possible de communiquer par socket entre plusieurs systèmes différents. Par exemple envoyer des données entre un PC sous Windows Recherche programme lecture Socket [ par DarknessLucifer ] Besoin d'un programme permettant de lire les informations Socket .. je travail sous windows.Si qq avait un programme fonctionnant je lui en serait tre socket RAW [ par oxydoxy ] et t'il possible d'utilise les RAW socket sous un environement comme vc++ avec winsock ? probleme socket sous windows XP [ par fr1man ] j'ai réalisé un "chat" avec les sockets en VC++6. il fonctionne très bien sous NT et 2000 mais pas sous XP. d'où vient le problème ?j'utilise l'API wi pb de socket sous windows XP [ par fr1man ] j'ai réalisé un "chat" avec les sockets en VC++6. il fonctionne très bien sous NT et 2000 mais pas sous XP. d'où vient le problème ?j'utilise l'API wi


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,293 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales