A quel moment le client se connecte au serveur ds mon exemple ? [c] - C - Programmation
Marsh Posté le 27-05-2004 à 01:46:00
Essaie de vider le flux de sortie après ton printf avec un fflush machin que j'ai oublié comment ca marche depuis le temps que j'ai pas fait de C ...
Marsh Posté le 27-05-2004 à 01:49:02
Ton client est connecté au serveur dès lors que le serveur accepte la connexion avec la fonction "accept"
Marsh Posté le 27-05-2004 à 02:20:44
Ernestor => ok j'essairais de faire ca, un flushall ou je ne sais quoi ou fflush(stdout)
Mino => je suis d'accord avec toi, mais c'est au niveau client que je me pose la question
serveur client
<-----------
------------>
<-----------
car j'aimerais faire que le client envoie en premier le paquet .
et si on mon raisonnement avec mon exemple il faudra que je fasse un send dans client.c au niveau de
"printf("\n Etabilssement de la connexion sur le serveur %s",argv[1]); " pour envoyer un paquet au serveur. Car sinon apres je perds la main.
Ca serait completement illogique de faire un send avant le connect dans client.c
Marsh Posté le 27-05-2004 à 04:32:57
Comme l'as dit Ernestor, le client n'affiche pas « ici » plus tôt car la sortie est bufferisée... Bref il s'affiche longtemps après que le « printf » est effectivement été appelé. Ajoute un « \n » ou ajoute un fflush(stdout).
Edit : sinon je suis pas sûr d'avoir compris ce que tu veux, et je suis pas sûr que tu ai compris comment marche TCP. La connexion est faite par le « connect ». Quand tu sorts du connect, il y a déja eu 3 packets échangés : SYN vers le serveur, ACK vers le client, SYN/ACK vers le serveur. Et la connexion TCP est établie.
Marsh Posté le 27-05-2004 à 11:35:55
yep merci exact
en mettant un simple \n cela marche
j'avais completement oublié qu'il etais conseille de le mettre en C unix alors qu'en C borland, je le mettais jamais
Marsh Posté le 27-05-2004 à 17:06:12
weed a écrit sous l'influence certaine de substance naturelle illicite a écrit : serveur client <----------- ------------> <----------- car j'aimerais faire que le client envoie en premier le paquet . |
C se qui se passe en effet
Le serveur ne fait qu'attendre indéfiniment un signal d'entrée (le SYN dont parle matafan), c donc forcément du client qu'il émane dans ce cas là.. (l'inverse serait absurde ici)
Marsh Posté le 26-05-2004 à 23:59:32
bonjour,
je comprends pas trop. Je pensais que le client envoyer les informations au serveur pour se connecter qu'a partir de la fonction connect () mais ca n'a pas l'air d'etre le cas ds mon exemple :
serveur.c :
et le client.c
je demare
./serveur
puis ./client 127.0.0.1
la fenetre client me demande de taper mes numéro de port (fonction saisi_port) puis apres le client mouline et attends une reponse du serveur. Et c'est la que je comprends pas. Le printf("ici" ); juste avant la fonction socket de client.c
Donc le client mouline, je vais sur la fenetre serveur et je tape mon entete avec ma fonction :tmenu_saisi (entete); et l'entete est envoyé au client
et ce qu'a partir de la que j'ai la main sur le client. Le client affiche "ici"(printf("ici" ). Pourquoi pas avant ?
Comment pourrais je envoyer un paquet au serveur dans un premier pour lui dire, je me connecte sur toi
et apres le serveur reponds au client, ok tu peux te connecter ...