CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[C] Programme de "chat" en localhost, avec 2 clients

Listas
Listas
Niveau 10
14 mars 2015 à 19:03:58

Salut j'ai un projet fac en ce moment et je bloque sur un truc qui est pourtant pas trop dur en fait on doit faireu n programme serveur, qui pourra gérer DEUX programmes client en execution (genre 2 fois le même quoi)

Le client 1 envoie un message au serveur, et le serveur répond au client 1 un msg de confirmation de réception
pareil avec un client 2 (qui doivent être co en même temps)

donc j'me suis dit que j'utilisearis des fork c'est bon ?
mais petit pb j'ai un msg d'erreur des fois :

"Probleme bind: Address already in use"

:d) Programme serveur :
http://pastebin.com/jbMrByDA

:d) Programme client :
http://pastebin.com/Gh9ZdNLY

je les execute en tapant :
./serveur localhost
puis
./client localhost
dans un 2ème terminal mais dès que j'essaye de lancer un premier client ça plante (j'ai déjà réussi à faire 2 autres versions serveur/client qui fonctionne pour les questions précédentes : on devait faire un serveur qui affiche un message envoyé par un client et un client qui affiche un accusé de réception du serveur donc ça pas de soucis je sais faire)

Vous savez pourquoi J'ai ça ? :(

vous avez une idée de modif à faire dans le serveur d'ailleurs ? parce que je pense que mon client est bon parce que j'ai fait mon client.c comme un pote et ça fonctionnait sous mes yeux
Voilà merci j'espère que vous pourrez m'aider :)

Listas
Listas
Niveau 10
15 mars 2015 à 02:53:22

ah merde ça a changé wtf

mon client répond :
ennui de connexion: Connection reset by peer
ennui de connexion: Connection refused
ennui de connexion: Connection refused

ah et c'est ensuite si j'essaye de relancer le serveur il me dit
"Probleme bind: Address already in use"

ça remarche qu'en fermant/réouvrant le term :(

Listas
Listas
Niveau 10
15 mars 2015 à 06:05:14

tiens on m'a dit qu'il faut que mon serveur connect() 2 fois (il le fait qu'une fois)
du coup faut que j'utilise plusieurs sockets ou ça se fait comment du coup ?
(désolé le repost c'est pour mettre les info que j'ai eu entre temps)

Pseudo supprimé
Pseudo supprimé 15 mars 2015 à 10:32:10

Faut que tu fasse un système de routine. Par là j'entends que ton serveur boucle en attendant la connection d'un client :d) le client se connecte :d) réponse du serveur :d) déconnection du client :d) attente du serveur :d) etc..

je me rappel avoir fais ça pour le chat d'un Tron en réseaux (centralisé et p2p) :ok:

EDIT:

et pour le serveur c'est normal que tu dois fermer/ouvrir le terminal, l'adresse et le port doivent toujours être occupés même si le code plante.

Message édité le 15 mars 2015 à 10:34:51 par Pseudo supprimé
89ron
89ron
Niveau 10
15 mars 2015 à 12:05:54

Si tu met un boucle dans ton programme je te conseil de mettre un
Sleep(1); // attend 1ms
sinon ton appli va pomper toutes les ressources processeur a elle seul :diable:

Par contre ton problème de connexion je me demande si ça ne vient pas du Fork, en faisant un Fork tu copie le l'adresse du Bind sur le socket et sa coince.

Également quand ton application crash pour une raison X ou Y, il me semble que le socket n'est pas refermer, ce qui peux générer des problèmes de connexion et t'oblige a relancer un nouveau terminal.

Message édité le 15 mars 2015 à 12:08:39 par 89ron
godrik
godrik
Niveau 30
15 mars 2015 à 21:24:23

Tu ne devrais pas forker dans le serveru.
Il te faut connecter plusieurs client a partir de la meme socket, c'est donc bien deux appels a connect qu'il te faut.

Tu peux ecouter sur plusieurs descripteurs de fichiers en meme temps en utilisant select(2).

Listas
Listas
Niveau 10
15 mars 2015 à 22:20:57

Jekijet :d) Donc il faut que je fasse une boucle "infinie" qui commence par un listen ?

genre un while(1) du listen() jusqu'au printf du message c'est ça ? ah ou du "listen()" jusqu'à ce que le connect soit positif ?
et j'sortirais du programme avec un exit(1) mais tu me conseille de sortir du programme à quelle condition ? au boût de 2 fils dont j'ai reçu le msg ?
est-cceq u'il faut que j'utilise 2 sockets ?

89ron :d) ah d'acc' merci pas de soucis :ok:

godrik :d) je fork dans mon client hein :noel:
Donc il faut que j'appelle connect 2 fois ? ou faut que j'fasse une boucle comme a dit Jekijet ? :(

merci de votre aide :ok:

Listas
Listas
Niveau 10
17 mars 2015 à 14:28:11

euh j'ai réessayé avec while(1) ou while(1==1) ou même "tant que moins 3 clients sont connectés" mais mon prgrm serveur s'arrête dès que un client à envoyé un message :-(

Si quelqu'un voit ça : vite svp j'rends ça dans quelques heures :fou: j'ai toujours pas trouvé :fou:

Message édité le 17 mars 2015 à 14:31:17 par Listas
Listas
Listas
Niveau 10
17 mars 2015 à 14:34:33

Je ne peux plus edit donc :
EDIT :

au passage, le client affiche :

$> recv failedReponse du serveur du fils 1 :
recv failedReponse du serveur du fils 2 :
Reponse du serveur du fils 1 :BONJOUR je suis fils 1
recv failedReponse du serveur du fils 2 :

le recv fail en testant le poids du buffer c'est curieux :doute:

Message édité le 17 mars 2015 à 14:34:50 par Listas
Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Création de sites web
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment