Remplir les données reçues (server socket tcp)
Fermé
emmy_2019
Messages postés
59
Date d'inscription
mardi 23 avril 2019
Statut
Membre
Dernière intervention
16 septembre 2019
-
30 avril 2019 à 14:01
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 - 2 mai 2019 à 16:22
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 - 2 mai 2019 à 16:22
A voir également:
- Remplir les données reçues (server socket tcp)
- Udp vs tcp - Guide
- Organigramme a remplir word - Guide
- Tcp optimizer - Télécharger - Optimisation
- Ps3 media server - Télécharger - Divers Réseau & Wi-Fi
- Remplir et signer pdf - Guide
1 réponse
[Dal]
Messages postés
6194
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
11 octobre 2024
1 092
2 mai 2019 à 11:37
2 mai 2019 à 11:37
Salut emmy_2019,
Tu pourrais avoir une seule boucle où tu gères ce que attends sur chaque port en fonction de l'état des portes.
Tu as 3 portes, et les données provenant du port indiquant le statut des portes t'informent que l'une d'elle est ouverte, tu dois attendre des données sur l'autre port susceptible de recevoir les données concernant la montée et descente de passagers par une ou plusieurs portes.
Par exemple, tu peux représenter les états importants pour ton application sous la forme suivante :
C'est une sorte de machine à états finis. Une façon simple de les mettre en place, en C, est l'utilisation des enum, et de fonctions qui s'occupent d'affecter les états en fonction des inputs, de gérer les transitions d'un état à un autre et les actions à exécuter selon les états courants, ces fonctions utilisant typiquement des switch/case.
Dal
Tu pourrais avoir une seule boucle où tu gères ce que attends sur chaque port en fonction de l'état des portes.
Tu as 3 portes, et les données provenant du port indiquant le statut des portes t'informent que l'une d'elle est ouverte, tu dois attendre des données sur l'autre port susceptible de recevoir les données concernant la montée et descente de passagers par une ou plusieurs portes.
Par exemple, tu peux représenter les états importants pour ton application sous la forme suivante :
#define DOORS_MAX 3 /* enum types for the various states */ enum all_doors_state { ALL_CLOSED, SOME_OPENED }; enum a_door_state { CLOSED, OPENED }; /* variables for storing states */ enum all_doors_state all_doors_state; enum a_door_state a_door_state[DOORS_MAX]; int main(void) { /* init states */ all_doors_state = ALL_CLOSED; for (int n = 0; n < DOORS_MAX; n++) a_door_state[n] = CLOSED; /* init the two servers */ // TODO: function for initializing the two servers // and make them ready to accept connections /* main loop */ while (1) { get_doors_input(ListenSocketDoors); if (all_doors_state == SOME_OPENED) get_passengers_input(ListenSocketPassengers); if (some_condition) break; } /* cleanup the two servers: destroy sockets, etc. */ // TODO return 0; }
C'est une sorte de machine à états finis. Une façon simple de les mettre en place, en C, est l'utilisation des enum, et de fonctions qui s'occupent d'affecter les états en fonction des inputs, de gérer les transitions d'un état à un autre et les actions à exécuter selon les états courants, ces fonctions utilisant typiquement des switch/case.
Dal
Modifié le 2 mai 2019 à 12:03
J'ai pas compris ton get_doors_input(ListenSocketDoors); et get_passengers_input(ListenSocketPassengers);
le parmètre de la fonction est ListenSocketDoors retourné par la fonction listen?
car j'ai une fonction server door qui fait tout l'init, listen, accept et recv() :
Aussi je ne vois pas l'idée de mettre l'init de deux serveurs en une seule fonction ?
2 mai 2019 à 12:10
tu as un exemple là : https://www.installsetupconfig.com/win32programming/windowsocketwinsock214_12.html
ou en utilisant des sockets Windows non bloquants,
une autre façon est aussi de lancer les serveurs dans des threads.
2 mai 2019 à 12:10
j'ai fait ce bout de code , est-ce que cela que vous voulez avoir ?
Modifié le 2 mai 2019 à 13:02
Tu vas créer un et appeler et avec celui-ci pour chaque serveur, et ce une seule fois par serveur.
Ces étapes terminent la mise en place de tes deux serveurs.
Ce qui doit fonctionner dans ta boucle, ce sont les pour tes 2 serveurs, que tu vas lancer différemment selon l'état des portes comme montré dans le code indicatif que j'ai écris (et qui visait juste à te montrer comment organiser l'exécution des différentes parties du code selon un état).
Une fois sorti de la boucle principale lorsque l'événement se produit, tu fermes les sockets de tes serveurs et fais une seule fois dans ton code.
Lis aussi mon message précédent, que tu n'as peut-être pas vu car tu postais ton message ci-dessus à la même minute : https://forums.commentcamarche.net/forum/affich-36000852-remplir-les-donnees-recues-server-socket-tcp#3
Modifié le 2 mai 2019 à 15:32
je vais voir le select(). C'est vrai je n'ai pas lu ton message de select()
voilà ce que j'ai fait pour init servers:
Que pense-tu à propos ce que j'ai fait?
J'ai fait deux listenSocket( door et passager)