begin process at 2012 05 28 08:49:17
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

Client/Serveur, encore.....


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

Client/Serveur, encore.....

jeudi 22 juillet 2004 à 10:38:32 | Client/Serveur, encore.....

glubust

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 <process.h>
#include <ctype.h>

#pragma comment(lib, "ws2_32.lib")

#define LG_MAX_REQUETE 1024
#define LEPORT 4150

void traitement(SOCKET);

void main()
{
int val,erreur;
WSADATA wsa;

char ladate[10],
lheure[10];

SOCKET serveur;
SOCKET client;
SOCKADDR_IN sin;
SOCKADDR_IN clientsin;

/* initialisation */
WSAStartup(MAKEWORD(2,0), &wsa);

/* 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);
}
}


=====================================
== Client sous Unix
=====================================
#include <stdio.h>
#include <errno.h>
#include <signal.h>

#include <time.h>

#include <netdb.h>
#include <netinet/in.h>
#include <sys/socket.h>

#define SERVEURNAME "172.17.112.52" /* SDIPROD */
#define LG_MAX_REQUETE 1024
#define PORT 4150

int to_server_socket = -1;

void traitement(struct sockaddr_in, char *);

int main (int argc, char **argv) {

char *server_name = SERVEURNAME;

struct sockaddr_in serverSockAddr;
struct hostent *serverHostEnt;

long hostAddr;
long status;

/* Connexion au serveur */
bzero(&serverSockAddr,sizeof(serverSockAddr));
hostAddr = inet_addr(SERVEURNAME);
if ( (long)hostAddr != (long)-1) bcopy(&hostAddr,&serverSockAddr.sin_addr,sizeof(hostAddr));
else {
serverHostEnt = gethostbyname(SERVEURNAME);
if (serverHostEnt == NULL) {
printf("Probleme gethost\n");
return(-1);
}
bcopy(serverHostEnt->h_addr,&serverSockAddr.sin_addr,serverHostEnt->h_length);
}
serverSockAddr.sin_port = htons(PORT);
serverSockAddr.sin_family = AF_INET;

/* Creation de la socket */
if ( (to_server_socket = socket(AF_INET,SOCK_STREAM,0)) < 0) {
printf("Probleme creation socket client\n");
return(-1);
}

/* Requete de connexion */
if(connect( to_server_socket, (struct sockaddr *)&serverSockAddr, sizeof(serverSockAddr)) < 0 ) {
printf("Probleme demande de connection\n");
return(-1);
}

traitement(serverSockAddr,argv[1]);

/* Fermeture de la connection */
shutdown(to_server_socket,2);
close(to_server_socket);

return(0);
}

void traitement(struct sockaddr_in lasocket, char *commande) {
int lg;

char recu[LG_MAX_REQUETE];

struct tm *t;

/* Recuperation de la date et heure courante */
time_t ti=time(0);
t=localtime(&ti);

memset(recu,' ',LG_MAX_REQUETE);

printf("Envoi au serveur le %.2u/%.2u/%.2u a %.2u:%.2u:%.2u :\n[%s]\n",t->tm_year,t->tm_mon,t->tm_mday,t->tm_hour,t->tm_min,t->tm_sec,commande);

/* Envoie donnees au serveur */
write(lasocket,commande,strlen(commande));

/* Receptionne + affiche les donnees envoyees par le serveur */
read(lasocket,recu,LG_MAX_REQUETE);

printf("[%s]",recu);
}

samedi 24 juillet 2004 à 00:08:50 | Re : Client/Serveur, encore.....

dletozeun

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...
lundi 26 juillet 2004 à 14:30:09 | Re : Client/Serveur, encore.....

glubust

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.
lundi 26 juillet 2004 à 15:57:11 | Re : Client/Serveur, encore.....

dletozeun

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...
lundi 26 juillet 2004 à 15:57:12 | Re : Client/Serveur, encore.....

dletozeun

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...
mardi 27 juillet 2004 à 15:03:21 | Re : Client/Serveur, encore.....

glubust

OK, merci, je vais voir avec WSAGetLastError pour voir si je trouve l'erreur.

A vrai dire, pour l'adresse IP, j'ai recupéré un programme qui fonctionnait comme ca, j'ai pas cherché a changer le INADDR_ANY.

Je te tiens au courant si j'avance....

Encore merci !
mardi 27 juillet 2004 à 16:17:44 | Re : Client/Serveur, encore.....
dimanche 15 mai 2005 à 11:05:37 | Re : Client/Serveur, encore.....

bakfouad



bakfouad

lundi 18 mai 2009 à 15:22:03 | Re : Client/Serveur, encore.....

amenir

SALUT
svp, aidez moi
je suis entrain de faire un projet de fin d'etude : envoi d'alerte entre serveur et client par snmp
interface avec c++  tres leger



Cette discussion est classée dans : serveur, client, include, socket, sin


Répondre à ce message

Sujets en rapport avec ce message

socket [ par flatou ] salutvoila le code du serveur sous dos que j'ai fait :#include #include #include #pragma comment(lib, "ws2_32.lib")SOCKET s;SOCKET c;SOCKET result;soc problème socket sous windows [ par kod32 ] Voici mon code : (winsock2.h)-----------------------------int main(){ /* inialisation */ WSADATA wsa; WSAStartup(MAKEWORD(2,0), &wsa); /* Client serveur [ par fanch314 ] Je que le serveur et le client échange par internet.Le serveur ne voit pas de client connectéEt le buffer du client contient nimporte quoi.En gros ils Besoin Aide (Client PHP/Serveur C++) [ par qbasic ] slt bien a vous je suis en train de coder un serveur en c++ socket en protocole tcp et un client en php C++LE SERVEUR C++ : #include #includ socket borlandC++6 [ par faucheuse ] Bonjour a tous Alors voila j'essai d'apprendre a me servir de la socket sous BORLAND C++6, mais ca me met toujours plein d'erreur. Finalement j'arri boucle infinie et file de message [ par kyfranBibax ] Bonjour,j'ai un petit problème avec des files de messages et une boucle infinie.J'ai crée 2 programmes (un serveur et un cllient) qui communiquent via SOCKET Information serveur [ par kiki67100 ] Salut tout le monde,Je voudrais retirer les information d'un serveur UDP "Gta en multi-joueur" , juste renvoyez se que le client "Officiel" a envoyez programmation socket [ par hanaw ] Comment écrire un programme simple communication client serveur en TCP/IP en C qui retourne au serveur un message contenant l'adresse IP du client. Client -> Serveur [ par norton ] Bonjour à tous. N'étant pas encore assez expérimenté dans le domaine des sockets je vous demande conseil.Je code sous Borland Builder C++ 6 avec les S envoi contenu d'un fichier par socket [ par aymoun11 ] cher amis,je suis entrain de développer un application pour envoi de contenu d'un ficher ou un tableau par socket a un serveur qui les affiche .pour l


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 : 3,229 sec (4)

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