glubust
Messages postés6Date d'inscriptionmardi 13 juillet 2004StatutMembreDernière intervention27 juillet 2004
-
22 juil. 2004 à 10:38
amenir
Messages postés3Date d'inscriptionmardi 17 mars 2009StatutMembreDernière intervention19 mai 2009
-
18 mai 2009 à 15:22
Je veux faire fonctionner une application client/serveur sous UNIX (client) et WINDOWS (serveur).
Le programme client envoi une simple requête au serveur ("copy ...", "lance.bat") qui l'exécute et renvoi son code retour au client (début d'un mini Ordonnanceur).
Ex : client "d:\lance.bat" (unix)
=> d:\lance.bat est exécute sur le serveur (win)
La connexion à l'air de se faire, mais aucune transmission !
Please?..HEEEEELP !
===================================
Serveur sous Windows
===================================
#include <stdio.h>
#include <winsock2.h>
#include <string.h>
#include <time.h>
#include
#include <ctype.h>
/* 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);
}
}
dletozeun
Messages postés546Date d'inscriptionvendredi 13 février 2004StatutMembreDernière intervention 9 janvier 20081 24 juil. 2004 à 00:08
qu'entend tu par la connection a l'air de se faire?
Le bind() se fait il correctement? le port est il reservé?
sin.sin_addr.s_addr = INADDR_ANY;
ca ca veut bien dire que tu laisse le pc choisir l'ip non? Si c'est le cas comment le client peut il se connecter au serveur sans savoir de quel pc il s'agit?
Mais on vu que je debute en prog reseau je dis peut etre des conneries...
glubust
Messages postés6Date d'inscriptionmardi 13 juillet 2004StatutMembreDernière intervention27 juillet 2004 26 juil. 2004 à 14:30
Et bien le client se connecte bien au serveur (bind ok), le port est bien réservé.
Le client se connecte au serveur à l'aide de l'IP que je lui donne en argument (#define SERVEURNAME) et au port que je lui indique (#define PORT 4150).
Ca c'est correct, mais le soucis c'est que le serveur ne reçois pas les infos que le client lui envoi.
Et la c'est la grosse nébuleuse pour moi étant donné que je débute aussi.
dletozeun
Messages postés546Date d'inscriptionvendredi 13 février 2004StatutMembreDernière intervention 9 janvier 20081 26 juil. 2004 à 15:57
essaie pour voir avec le port: 27015
et l'ip tu lui met quoi? Ce que je ne comprends toujours pas c'est a la ligne ou tu defini l'ip du serveur dans le code du serveur:
sin.sin_addr.s_addr = INADDR_ANY;
moije mettrais sin.sin_addr.s_addr = "62.14.78.45"; par exemple...
d'ailleurs sans le code du serveur au moment de l'initialisation pour ensuite executer le bind je ne vois pas de serveurname
Mais bon si ca fonctionne bien comme ca...
Et pour les erreur utilise WSAGetLastError qui contient la derniere erreur dans le socket.tu pourras peut etre y voir ou est le probleme...
dletozeun
Messages postés546Date d'inscriptionvendredi 13 février 2004StatutMembreDernière intervention 9 janvier 20081 26 juil. 2004 à 15:57
essaie pour voir avec le port: 27015
et l'ip tu lui met quoi? Ce que je ne comprends toujours pas c'est a la ligne ou tu defini l'ip du serveur dans le code du serveur:
sin.sin_addr.s_addr = INADDR_ANY;
moije mettrais sin.sin_addr.s_addr = "62.14.78.45"; par exemple...
d'ailleurs sans le code du serveur au moment de l'initialisation pour ensuite executer le bind je ne vois pas de serveurname
Mais bon si ca fonctionne bien comme ca...
Et pour les erreur utilise WSAGetLastError qui contient la derniere erreur dans le socket.tu pourras peut etre y voir ou est le probleme...
Vous n’avez pas trouvé la réponse que vous recherchez ?