bonjour je suis étudiant en informatique, dans le cadre d'un stage j'ai une application réseau à réaliser en c. Mon problème est le suivant suite à la compilation de mon programme lors de l'appel du programme,celui-ci s'éxécute sans rien réaliser.
Voici comment je l'éxécute: nom-programme TCP serveur 8000
Je pense que le problème doit venir de cet comparaison ( if ((argc!=2 && strcmp(argv[1],"manuelle")==0) || (argc!=5 && strcmp(argv[2],"client")==0) || (argc!=4 && strcmp(argv[2],"serveur")==0)) )
Mon programme est le suivant:#include <winsock.h> /* pour les fonctions socket...*/
#include<stdio.h>
#include<string.h>
#include <time.h>
#pragma comment(lib, "ws2_32.lib")
#define TAILLE_BUFFER 1000
//declaration des variables globales//
char proto[256];
char rep[256];
int port=10000;
char adresse_ip[255];
char msg[1000];
char buffer[1000];
char continuer[6];
int i=1;
SOCKADDR_IN information_sur_la_destination;
SOCKET id_de_la_socket;
SOCKET acceptation;
void saisie(void);
void client(int);
void serveur(void);
void ouvert(void);
void reception(void);
void envoi(void);
//côté client
void client(int mode)
{
//mode=0 si auto et mode=1 si manuelle
struct hostent *nom_serveur;
SOCKET connection;
int j;
if (mode ==1)
{
//saisie de l'adresse IP du serveur
printf("Entrez l'adresse IP du serveur :" );
scanf("%s",adresse_ip);
}
nom_serveur=gethostbyname(adresse_ip);
while(nom_serveur==NULL)
{
perror("adresse non valide" );
printf("Entrez l'adresse IP du serveur :" );
scanf("%s",adresse_ip);
nom_serveur=gethostbyname(adresse_ip);
}
information_sur_la_destination.sin_port = htons(port);
information_sur_la_destination.sin_family = AF_INET;
information_sur_la_destination.sin_addr.s_addr = inet_addr(adresse_ip);
if (strcmp(proto,"t")==0||strcmp(proto,"tcp")==0)
{
connection=connect(id_de_la_socket, (SOCKADDR*)&information_sur_la_destination,TAILLE_BUFFER );
if (connection!=0)
{
printf("Desole, je n'ai pas pu ouvrir la session TCP : %d %d\n",connection,WSAGetLastError());
}
}
envoi();
}
void envoi()
{
int c_envoi_tcp;
int c_envoi_udp;
FILE * myfile;
myfile = fopen("vitesse_réseau.txt", "w+");
while (i<15)
{
char *dispo=malloc (sizeof (*dispo)*256);
if(dispo==NULL)
{
printf("%ld \n",WSAGetLastError());
}
if (strcmp(proto,"u")==0||strcmp(proto,"udp")==0)
{//envoi d'un message dans la connexion UDP//
clock_t a=clock();
c_envoi_udp=sendto(id_de_la_socket,msg,300,0,(SOCKADDR*)&information_sur_la_destination,TAILLE_BUFFER );
if(c_envoi_udp!=INVALID_SOCKET)
{
printf("%i \n",c_envoi_udp);
}
else
{
printf("%ld \n",WSAGetLastError());
}
printf ("duree= %f sec\n",(clock()-a)/CLOCKS_PER_SEC);
fprintf (myfile, "proto: %s,port: %i,msg: %i,temps: %f secondes \n",proto,port,c_envoi_udp,(clock()-a)/CLOCKS_PER_SEC);
}
else
{//envoi d'un message dans la connexion TCP//
clock_t a=clock();
c_envoi_tcp=send(id_de_la_socket,dispo,TAILLE_BUFFER, 0);
if(c_envoi_tcp!= INVALID_SOCKET)
{
printf("%i \n",c_envoi_tcp);
}
else
{
printf("%ld \n",WSAGetLastError());
}
printf ("duree= %f sec\n",(clock()-a)/CLOCKS_PER_SEC);
fprintf (myfile, "proto: %s,port: %i,msg: %i,temps: %f secondes\n",proto,port,c_envoi_tcp,(clock()-a)/CLOCKS_PER_SEC);
free(dispo);
}
i++;
}
fclose(myfile);
}
//côté serveur
void serveur()
{
SOCKET id_de_la_nouvelle_socket; // Identifiant de la nouvelle socket
SOCKADDR_IN information_sur_la_source; // Déclaration de la structure des informations lié à l'écoute
SOCKET ouverture;
SOCKET ecoute;
int tempo;
printf("test dkfsjdqkhf");
//entrer dans la connexion TCP et UDP//
information_sur_la_destination.sin_addr.s_addr = htonl(INADDR_ANY);;
information_sur_la_destination.sin_family = AF_INET;
information_sur_la_destination.sin_port = htons(port);
ouverture=bind(id_de_la_socket, (SOCKADDR *) &information_sur_la_destination, TAILLE_BUFFER );
if (ouverture!=0)
{
printf("Desole, je ne peut pas ecoute la session TCP : %d %d\n",ouverture,WSAGetLastError());
}
if (strcmp(proto,"t")==0||strcmp(proto,"tcp")==0)
{//connexion TCP//
ecoute=99; // Initiation de erreur pour être sur que l'on va rentrer dans la boucle
while(ecoute!=0) // Boucle tant qu'une demande de session (SYN) tcp n'a pas été reçu
{
ecoute=listen(id_de_la_socket,1);
printf("ecoute ok");
}
tempo= sizeof (information_sur_la_source);
acceptation=accept(id_de_la_socket,(SOCKADDR*)&information_sur_la_source,&tempo);
if (acceptation != INVALID_SOCKET)
{
printf ("Le client est connecte a la socket %d sur %s:%d\n"
,acceptation
,inet_ntoa (information_sur_la_source.sin_addr)
,htons (information_sur_la_source.sin_port));
}
}
reception();
}
void reception()
{
int s_recpt_tcp;
int s_recpt_udp;
int control1;
while (i<15)
{
//reception TCP
if (strcmp(proto,"t")==0||strcmp(proto,"tcp")==0)
{
s_recpt_tcp=recv(acceptation,buffer,sizeof(buffer), 0);
if(s_recpt_tcp!=INVALID_SOCKET)
{
printf("%i \n",s_recpt_tcp);
}
else
{
printf("%ld \n",WSAGetLastError());
}
}
//reception UDP
else
{
control1=sizeof(information_sur_la_destination);
s_recpt_udp=recvfrom (id_de_la_socket,buffer,301,0,(SOCKADDR*)&information_sur_la_destination,&control1);
if(s_recpt_udp!=INVALID_SOCKET)
{
printf("%i \n",s_recpt_udp);
}
else
{
printf("%ld \n",WSAGetLastError());
}
}
i++;
}
}
//ouverture des sockets//
void ouvert()
{
if (strcmp(proto,"u")==0||strcmp(proto,"udp")==0)
{
id_de_la_socket=socket(AF_INET,SOCK_DGRAM,0);
if (id_de_la_socket == INVALID_SOCKET)
{
printf("%ld \n",WSAGetLastError());
}
printf("serveur ou client UDP");
}
else
{
if (strcmp(rep,"c")==0||strcmp(rep,"client")==0)
{
id_de_la_socket = socket (AF_INET, SOCK_STREAM, 0);
if (id_de_la_socket == INVALID_SOCKET)
{
printf("%ld \n",WSAGetLastError());
}
printf("client TCP");
}
else
{
id_de_la_socket=socket(AF_INET,SOCK_STREAM,0);
if (id_de_la_socket == INVALID_SOCKET)
{
printf("%ld \n",WSAGetLastError());
}
printf("serveur TCP");
}
}
}
//saisie de l'utilisateur//
void saisie()
{
//demande du protocole//
printf("protocole(udp ou tcp):");
scanf("%s", &proto);
while ((strcmp(proto,"u")!=0&&strcmp(proto,"udp")!=0)&&(strcmp(proto,"t")!=0&&strcmp(proto,"tcp")!=0))
{
printf("veuillez entrez une valeur correct (udp ou tcp)\n");
scanf("%s",&proto);
}
//demande du poste//
printf("poste client ou serveur:");
scanf("%s", &rep);
while ((strcmp(rep,"c")!=0&&strcmp(rep,"client")!=0)&&(strcmp(rep,"s")!=0&&strcmp(rep,"serveur")!=0))
{
printf("veuillez entrez une valeur correct(Client ou Serveur)\n");
scanf("%s",&rep);
}
//port d'ecoute//
printf("port:");
scanf("%i", &port);
if (port==0)
{
port=10000;
}
}
//fonction principale//
int main(int argc, char* argv[] )
{
int demarrage,mode,i;
WSADATA WSAData;
for (i=1;i<argc;i++)
{
if (strlen (argv[i])<0)
{
strcpy (argv[i],"test");
}
}
if ((argc!=2 && strcmp(argv[1],"manuelle")==0) || (argc!=5 && strcmp(argv[2],"client")==0) || (argc!=4 && strcmp(argv[2],"serveur")==0))
{
printf ("\nmain2 - 2007 - Damien Schaeffer");
printf ("\n-------------------------------");
printf ("\nSyntaxe main2 [protocole place port [@IP]]||[manuelle]");
printf ("\n\n\t - protocole = TCP || UDP");
printf ("\n\t - place = serveur || client");
printf ("\n\t - port = entre 5000 et 10000");
printf ("\n\t - [@IP] = adresse IP destination.Uniquement valable pour le client");
printf ("\n\n mettez juste \"manuelle\" si vous souhaitez rentrer les donnees via le programme");
return 0;
}
demarrage=WSAStartup(MAKEWORD(2,0), &WSAData);
if(demarrage!=0)
{
printf("%ld \n",WSAGetLastError());
return 0;
}
strcpy (proto,argv[1]);
strcpy (rep , argv[2]);
port =(int) argv[3];
strcpy (adresse_ip, argv[4]);
if (strcmp (argv[1],"manuelle")==0)
{
mode=1;
}
else
{
mode=0;
}
if (strcmp(argv[1],"manuelle")==0)
{
saisie();
}
ouvert();
if (strcmp(argv[2],"s")==0||strcmp(argv[2],"serveur")==0)
{
serveur();
}
else
{
client(mode);
}
closesocket(id_de_la_socket);
system("pause");
WSACleanup();
return 0;
}
Merci d'avance de votre aide.Grums45