glubust
Messages postés6Date d'inscriptionmardi 13 juillet 2004StatutMembreDernière intervention27 juillet 2004
-
15 juil. 2004 à 10:25
glubust
Messages postés6Date d'inscriptionmardi 13 juillet 2004StatutMembreDernière intervention27 juillet 2004
-
19 juil. 2004 à 23:42
J'aimerais faire fonctionner une application client/serveur sous UNIX (client) et WINDOWS (serveur).
Pouvez vous me dire si cela est possible ?
Avez vous des sources qui pourraient m'aider ? J'ai fais un serveur qui fonctionne sous win, un client qui fonctionne sous unix, mais je n'arrive pas à faire fonctionner les deux en même temps : la connexion à l'air de se faire, mais aucune transmissions !!!
/* creation de la socket serveur */
serveur=socket(AF_INET,SOCK_STREAM,0);
if(serveur==INVALID_SOCKET)
{
perror("erreur de creation de la socket");
exit(-1);
}
/* configuration de la socket */
sin.sin_addr.s_addr = INADDR_ANY;
sin.sin_family = AF_INET;
sin.sin_port = htons(LEPORT);
/* attacher le socket au n° de port*/
erreur=bind(serveur,(SOCKADDR *)&sin, sizeof(sin));
if(erreur == INVALID_SOCKET)
{
perror("bind");
exit(-1);
}
/* Recuperation de la date et heure courante */
_strdate(ladate);
_strtime(lheure);
/* creation d'une file d'attente de demande de connexion */
listen(serveur,0);
val=sizeof(clientsin);
printf("\tServeur en route le %s a %s\n",ladate,lheure);
while(1)
{
/* accepter une connexion */
client=accept(serveur,(SOCKADDR *)&clientsin,&val);
if(client == INVALID_SOCKET)
{
perror("erreur de connection");
exit(-1);
}
/* fonction qui utilise la socket */
traitement(client);
}
}
/**************************************************************
traitement
traite la requete envoyer par le client
**************************************************************/
void traitement(SOCKET client)
{
int lg, /* longueur de la chaine reçue */
ret=0, /* code retour de la ligne de commande executee */
retrex=0; /* code retour du rex */
char recu[LG_MAX_REQUETE], /* message recu du client */
envoi[LG_MAX_REQUETE], /* message envoye au client */
date[10], /* date systeme */
heure[10]; /* heure systeme */
/* attendre la reception d'une requete sur la socket "client" */
lg=recv(client,recu,LG_MAX_REQUETE,0);
recu[lg]='\0';
memset(envoi,' ',LG_MAX_REQUETE);
/* Recuperation de la date et heure courante */
_strdate(date);
_strtime(heure);
printf("Execution %s-%s : %s\n",date,heure,recu);
/* execution de la ligne de commande passe en parametre */
ret=system(recu);
/* Recuperation de la date et heure courante */
_strdate(date);
_strtime(heure);
printf("Ret system : %d - Termine %s-%s\n",ret,date,heure);
sprintf(envoi, "Termine le %s a %s",date,heure);
lg=strlen(envoi);
/* envoyer une requete sur la socket "client" */
send(client,envoi,lg,0);
}
}
glubust
Messages postés6Date d'inscriptionmardi 13 juillet 2004StatutMembreDernière intervention27 juillet 2004 19 juil. 2004 à 23:42
Explication du prog :
Le programme client envoi une requete au serveur (style "copy ...", "lance.bat") qui l'exucute et renvoi son code retour au client.
Ex : client "d:\lance.bat" (unix)
=> d:\lance.bat est execute sur le serveur (win)