Flux rss
Collection CommentCaMarche.net
Rechercher : dans
Par : Pertinence Date Nom d'utilisateur
Statut : Non résolu

[C]Client seurveur : quel algorythme choisir

  sbix, le dimanche 15 juillet 2007 à 13:57:05
Par défaut Client seurveur : quel algorythme choisir
salut.
je voudrai faire un programme Client serveur. L'etablissement de la connection se passe sans problème, mais je n'ai pas su dire au programme comment recevoir l'invite de commande, demander la commande à l'utilisateur, faire la comparaison pour savoir si elle existe, executer les commandes correspondantes, puis retourner un tesultat.
Ces opérations eux mêmes, ne sont pas difficiles à ecrire, mais il parais que je devrai les faire en boucle, pour que le programme marche bien... justement je n'ai pas su le faire

voici un essai :
Le serveur
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<winsock2.h>
 
/*********************************/
int erreur=0;
WSAData initialisation;
SOCKET ma_socket;
SOCKET acceptation;
int temp;
SOCKADDR_IN info_client;
char buffer[65000];
int reception;
/********************************/
 
int main()
{
/*initialisation de winsock*/
erreur = WSAStartup(MAKEWORD(2,0), &initialisation);
if(erreur!=0)
    {printf("Erreur lors de l'initialisation de WSAStartup. %d\n", WSAGetLastError());}
else
    {printf("WSAStartup : OK\n");}
/*ouverture de la socket*/
ma_socket = socket(AF_INET, SOCK_STREAM, 0);
if(ma_socket!=INVALID_SOCKET)
    {printf("Opening socket : OK\n");}
else
    {printf("Erreur lors de l'ouverture de la socket. %d\n", WSAGetLastError());}
/*sockoption*/
temp=1;
erreur = setsockopt(ma_socket, IPPROTO_TCP, TCP_NODELAY, (char*)&temp, sizeof(temp));
if(erreur!=0)
    {printf("Erreur lors de la definition de l'algorithme de Nagle. %d\n", WSAGetLastError());}
else
    {printf("Algorithme de Nagle : OK\n");}
 
/*ecoute sur une ip et un port*/
info_client.sin_family=AF_INET;
info_client.sin_addr.s_addr=INADDR_ANY; // ecoute sur les IPs locales.
info_client.sin_port=htons(7777);
erreur=bind(ma_socket, (struct sockaddr*)&info_client, sizeof(info_client));
if(erreur!=0)
    {printf("Erreur lors de la lise en ecoutes sur l'ip et/ou le port. %d\n", WSAGetLastError());}
else
    {printf("IP et port : OK\n");}
 
/*attente de la connection du client*/
erreur=99;
while(erreur!=0)
    {erreur=listen(ma_socket, 1);
    printf("Attente de la connection du client.\n");}
 
/*acceptaion de la demande de connection*/
temp=sizeof(info_client);
acceptation=accept(ma_socket, (struct sockaddr*)&info_client, &temp);
if(acceptation!=INVALID_SOCKET)
    {printf("connection du client : OK\n");
 
 
    /***************************************************************/
    memset(buffer, 0, sizeof(buffer));
    strcpy(buffer, "\nRFT >"); // l'invite de commande
    send(ma_socket, buffer, strlen(buffer), 0);
 
    recv(acceptation, buffer, 1515, 0); // reception de la commande
    if(strcpm(buffer, "com1")==0); //comparaison de la commande
        {memset(buffer,0,sizeof(buffer));
        strcpy(buffer, "\nCommande Correcte.");
        send(ma_socket, buffer, sizeof(buffer));}
    /***********************************************************/}
else
    {printf("Connection invalide. %d\n", WSAGetLastError());}
 
    /*reception des données*/
reception=recv(acceptation, buffer, 1515, 0);
if(reception==SOCKET_ERROR)
    {printf("Aucune donnes recue. %d\n", WSAGetLastError());}
else
    {buffer[reception]=0;
    printf("Le Client dit :\n\t%s", buffer);}
 
/*Fermeture de la cession TCP*/
erreur=shutdown(acceptation, 2);
if(erreur!=0)
    {printf("Erreur lors de la fermeture de la session TCP. %d\n", WSAGetLastError());}
else
    {printf("Fermeture de la session TCP  : OK\n");}
 
/*fermeture des 2 sockets*/
erreur=closesocket(acceptation);
if(erreur!=0)
    {printf("Erreur lors de le fermeture de la socket 1. %d\n", WSAGetLastError());}
else
    {printf("Fermeture de la socket : OK\n");}
 
erreur=closesocket(ma_socket);
if(erreur!=0)
    {printf("Erreur lors de le fermeture de la socket 2. %d\n", WSAGetLastError());}
else
    {printf("Fermeture de la socket : OK\n");}
 
/*Fermeture de winsock*/
erreur=WSACleanup();
if(erreur!=0)
    {printf("Ereur lors de la fermeture de WinSock. %d\n", WSAGetLastError());}
else
    {printf("Fermeture de winsock : OK\n");}
 
system("PAUSE");
 
}
 


Le client

#include<winsock2.h>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
/*Le client*/
 
int erreur=0;
WSAData initialisation;
SOCKET ma_socket;
int temp;
SOCKADDR_IN info_serveur;
char buffer[65000];
int envoi;
 
int main()
{
    /*initialisation de winsock*/
erreur = WSAStartup(MAKEWORD(2,0), &initialisation);
if(erreur!=0)
{printf("Erreur lors de l'initialisation de WSAStartup. %d\n", WSAGetLastError());}
else
{printf("WSAStartup : OK\n");}
    /*ouverture de la socket*/
ma_socket = socket(AF_INET, SOCK_STREAM, 0);
if(ma_socket!=INVALID_SOCKET)
{printf("Opening socket : OK\n");}
else
{printf("Erreur lors de l'ouverture de la socket. %d\n", WSAGetLastError());}
    /*sockoption*/
temp=1;
erreur = setsockopt(ma_socket, IPPROTO_TCP, TCP_NODELAY, (char*)&temp, sizeof(temp));
if(erreur!=0)
{printf("Erreur lors de la definition de l'algorithme de Nagle. %d\n", WSAGetLastError());}
else
{printf("Algorithme de Nagle : OK\n");}
 
/*Ouverture de la session TCP*/
info_serveur.sin_family=AF_INET;
info_serveur.sin_addr.s_addr=inet_addr("127.0.0.1");
info_serveur.sin_port=htons(7777);
 
erreur=connect(ma_socket, (struct sockaddr*)&info_serveur, sizeof(info_serveur));
if(erreur!=0)
{printf("Erreur lors de l'ouverture de la session TCP. %d\n", WSAGetLastError());}
else
{printf("Remote Victim Fucked ...\n");
 
 
 
/***********reception de l'invite*************************/
acceptation=accept(ma_socket, (struct sockaddr*)&info_serveur, sizeof(info_client));
recv(acceptation, buffer, 1515, 0);
/********************/
printf("\n%s ", buffer);
memset(buffer, 0, sizeof(buffer));
char commande[50]
scanf("%s", &commande);
/********************evois de la commande*********/
strcpy(buffer, commande);
envoi=send(ma_socket, buffer, strlen(buffer), 0);
memset(buffer, 0, sizeof(buffer));
/**********************************************************/
}
 
 
 
 
    /*fermeture de la cession TCP*/
erreur=shutdown(ma_socket, 2);
if(erreur!=0)
{printf("Erreur lors de la fermeture de la session TCP. %d\n", WSAGetLastError());}
else
{printf("Fermeture de la session TCP  : OK\n");}
 
    /*Fermeture de la socket*/
erreur=closesocket(ma_socket);
if(erreur!=0)
{printf("Erreur lors de le fermeture de la socket. %d\n", WSAGetLastError());}
else
{printf("Fermeture de la socket : OK\n");}
 
    /*Fermeture de winsock*/
erreur=WSACleanup();
if(erreur!=0)
{printf("Ereur lors de la fermeture de WinSock. %d\n", WSAGetLastError());}
else
{printf("Fermeture de winsock : OK\n");}
 
system("PAUSE");
 
}
 


Merci de votre aide
Configuration: Windows XP
Firefox 2.0.0.4
Répondre à sbix  Signaler ce message aux modérateurs

Résultats pour [C]Client seurveur : quel algorythme choisir

[ciel gestion] plus de liste par code clients (Résolu) Bonjour! j'ai du faire une mauvaise manip sur mon logiciel ciel gestion co, et je n'arrive plus a faire de recherche par code client ou n°facture (alors que la fonction recherche multicritere fonctionne); et quand j'ouvre une facture,... www.commentcamarche.net/forum/affich-3246953-ciel-gestion-plus-de-liste-par-code-clients
Firefox: choisir dossier de téléchargement (Résolu) Bonjour, Comment fait-on pour choisir un autre dossier que le bureau pour les téléchargements? Dans mon Firefox 2.0.0.11, l'onglet téléchargement ne se trouve plus dans Options mais il y a une fonction téléchargement dans Outils. Il enregistre... www.commentcamarche.net/forum/affich-4288858-firefox-choisir-dossier-de-telechargement
Choix disque dur externe (Résolu) Bonjour à tous, merci de me donner quelques conseils techniques pour le choix d'un disque dur externe. Voici mes souhait: - 250 à 500 Go - rapide - fiable ( bien sur) Le prix? si j'ai les bons conseilstechniques, je lancerai la recherche... www.commentcamarche.net/forum/affich-3086399-choix-disque-dur-externe

Résultats pour [C]Client seurveur : quel algorythme choisir

[PHP] Rediriger en fonction de la langue du visiteurBeaucoup de sites demandent à ce que l'on choisisse la langue en cliquant sur une icône correspondant au pays. Il est possible de détecter la langue par défaut du visiteur grâce aux informations fournies par son navigateur (langues acceptées :... www.commentcamarche.net/faq/sujet-876-php-rediriger-en-fonction-de-la-langue-du-visiteur
Stockage de documents : choisir le bon supportStockage de documents : choisir le bon support Choisir le bon support de stockage en fonction de la durée de vie des supports, de la durée légale d'archivage, de la fréquence d'utilisation et du coût d'archivage. Durée de vie des... www.commentcamarche.net/faq/sujet-11233-stockage-de-documents-choisir-le-bon-support
[Programmation] Polices de caractères pour programmeurCourrier: Un mauvais choix La plupart des programmeurs utilisent la police de caractères Courrier pour travailler. C'est un mauvais choix, car cette police est peu lisible. En taille 9, il est impossible de distinguer 0 (zéro) de O (lettre... www.commentcamarche.net/faq/sujet-3960-programmation-polices-de-caracteres-pour-programmeur

Résultats pour [C]Client seurveur : quel algorythme choisir

Attention, alerte PayPal (Résolu)Bonjour, Juste pour vous dire de faire attention : j'ai recu deux mails, ce matin, qui venait "soit disant" de service paypal (servicepaypal@centredeecurite.fr" voici l'objet du message : Informations concernant votre compte: Cher client... www.commentcamarche.net/forum/affich-5694480-attention-alerte-paypal
Liste déroulante excel vba (Résolu)Salut a tous je suis en train de faire un petit programme sous excel avec des macros. je souhaite créer une liste déroulante sur ma feuille excel, ajouter des données présentes dans un tableau que je crée en vba et choisir dans ma liste sur ma feuille... www.commentcamarche.net/forum/affich-1266881-liste-deroulante-excel-vba
Choisir un programme d'ouverture par defaut (Résolu)Bonjour, Comment fait on pour choisir un programme d'ouverture par defaut d'un fichier video AVI ? Actuellement c'est Quick time et je souhaiterais que ce sois VLC. Merci pour vos reponses. www.commentcamarche.net/forum/affich-7407590-choisir-un-programme-d-ouverture-par-defaut

Résultats pour [C]Client seurveur : quel algorythme choisir

Travaux d'économie d'énergie : un nouveau comparateur en ligne de prêt bancaire(Paris - Relaxnews) - Eco-Prêts est le nom du comparateur de prêts bancaires dédiés aux économies d'énergie lancé par l'Ademe (Agence de l'Environnement et de maîtrise de l'énergie) et Testé pour vous. Ce nouveau comparateur doit faciliter le choix... www.commentcamarche.net/actualites/travaux-d-economie-d-energie-un-nouveau-comparateur-en-ligne-de-pret-bancaire-3207148-actualite.php3

Résultats pour [C]Client seurveur : quel algorythme choisir

Ccapp - ccapp.execcapp - ccapp.exe Le processus ccapp.exe (ccapp signifiant Common Client Application) est un processus correspondant à l'antivirus Norton Antivirus. Il s'agit d'un processus applicatif pouvant être arrêté. Toutefois, afin d'assurer le bon... www.commentcamarche.net/contents/processus/ccapp-exe.php3
Ccevtmgr - ccevtmgr.execcevtmgr - ccevtmgr.exe Le processus ccevtmgr.exe (ccevtmgr signifiant Common Client Event Manager) est un processus correspondant à l'antivirus Norton Antivirus. Il s'agit d'un processus applicatif pouvant être arrêté. Toutefois, afin d'assurer... www.commentcamarche.net/contents/processus/ccevtmgr-exe.php3
Ccsetmgr - ccsetmgr.execcsetmgr - ccsetmgr.exe Le processus ccsetmgr.exe (ccsetmgr signifiant Common Client Settings Manager Service) est un processus correspondant à l'antivirus Norton Antivirus. Il s'agit d'un processus applicatif pouvant être arrêté. Toutefois, afin... www.commentcamarche.net/contents/processus/ccsetmgr-exe.php3