Sujet: client-socket en C
06/05/2002 @ 17:17:59: watch: client-socket en C
quelqu'un sait comment on fait pour spécifier le port d'un client-socket en C? J'ai mon serveur socket sur le port 4444 mais j'arrive pas a spécifier le clientsocket et ca m'embete pour passer via un firewall... En plus il est aléatoire. (P.S, c'est compilé sur un Unix 64bits)
06/05/2002 @ 17:28:21: GoA: 
Euuuh je suis pas sur d'avoir tout a fait compris ce dont tu avais besoin...

enfin j'espere que c'est ca parceque sinon je me serais fais chier pour rien...


bon quelque part dans le code du a un appel au system call suivante :

int bind(int sockfd, struct sockaddr *my_addr, int addrlen);


ou a celui ci, ( parceque j'ai pas compris si c'était une application cliente ou une application serveur )

int connect(int sockfd, struct sockaddr *serv_addr, int addrlen);


le second parametre est la structure qui contient le port sur lequel tu veux ecouter...

Donc qque part dans ton code tu devrais avoir un truc du genre :

sockaddr my_sockaddr;

my_sockaddr.sin_port = htons(4444) /* si le port est fixé ici, mais à mon avis c'est un define */


Voila, j'espere que ca te permettra de changer le code source...

Et j'espère surtout que c'est bien ca que tu demandais !!!

( sinon j'ai pas l'air con :lol: )
06/05/2002 @ 17:33:07: GoA: 
A merde !!! Apparement comme un con j'avais rien pigé !!!!


Ben a mon avis, tu peut binder le socket de l'application cliente à un port avant de faire le connect... je suis pas sûr mais ca doit être ca ...

Désolé j'ai pas les bouquins TCP/IP Vol 1 2 3 de mon cher Stevens ( J'EN PROFITE DONC POUR PASSER UN MESSAGE AUX GENS QUI DISPOSERAIENT DE CES BOUQUINS EN PDF OU TOUT AUTRE FORMAT ELECTRONIQUE... MERCI D'AVANCE :wink: )
06/05/2002 @ 17:35:03: watch: 
ben en fait les termes sont ambigus, c'est pas le socket employé par le client et par le serveur

CLIENT ==== SERVEUR


mais c'est un peu le meme principe qu'un ftp actif, si un pc veut etablie une connexion il le dit vie le Serveur socket (qu'on définit via le code que t'as donné) et puis un/des port est/sont employé pour faire le transfert de données... et ces ports la sont choisis aléatoirement... (en ftp , via le 21 puis des ports aléatoires sont utilisés pour le transfert de données afin de permettre au 21 d'écouter pour de nouvelles connexions... Et comme ca on doit pas jouer avec des sémaphores afin de pouvoir établir plusieurs connexions simultanées. En fait il faudrait pouvoir définir un range de ports a ouvrir pour permettre plusieurs connexions simult...


J'espère que c'est un peu plus clair... Merci d'avoir cherché en tout cas :smile:
06/05/2002 @ 17:38:16: GoA: 
Ben il me semble qu'avec ce que t'as la t'as suffisement d'infos pour tirer ton plan :sol:
06/05/2002 @ 17:43:35: watch: 

Ben a mon avis, tu peut binder le socket de l'application cliente à un port avant de faire le connect... je suis pas sûr mais ca doit être ca ...


ben ouaip mais la syntaxe du bind ne s'applique que pour le serveur-socket, et j'arrive pas a trouves la bonne syntaxe pour le client, car ds la structure, y'a pas le sin_port du client...


Bah je vais continuer a chercher... Merci de ton aide en tout cas
06/05/2002 @ 17:52:14: GoA: 

ben ouaip mais la syntaxe du bind ne s'applique que pour le serveur-socket, et j'arrive pas a trouves la bonne syntaxe pour le client, car ds la structure, y'a pas le sin_port du client...


Bah je vais continuer a chercher... Merci de ton aide en tout cas


Je ne suis pas certain de ce que j'avance, mais d'après mes infos la syntaxe du bind fonctionne pour un client.

Once you have a socket, you might have to associate that socket with a port on your local machine (...) If you're going to only be doing a connect(), this may be unnecessary.


Donc si je lis bien et si mon anglais n'est pas trop bidon : Une fois que t'as un socket tu peut l'associer à un port de t'as machine ( via bind ) ( ... ) Si c'est uniquement pour faire un connect()... Cela peut ne pas être nécessaire...

Alors moi je pense que tu peut taper un bind même pour ton client...
06/05/2002 @ 17:53:54: watch: 
je vais rechecker demain... :smile: je te dirai quoi (meme si t'en auras rien a fouttre :wink: )
06/05/2002 @ 17:56:05: GoA: 
Enfin moi je dis ca je dis rien hein...

Après tout ca fait 4 ans que j'ai pas programmé directement les sockets... :wink:
06/05/2002 @ 18:08:05: watch: 
ta station météo c'était pas en C??? ou en Delphi, je sais plus maintenant...
06/05/2002 @ 18:15:55: GoA: 
VB malheureusement ( on n'avait pas le choix de langage, mais bon j'aime encore assez bien le VB )

Et y avais pas de socket :smile:
06/05/2002 @ 18:17:07: watch: 
ah il me semblait que c'était ce que Bull m'avait dit... ma mémoire me joue des tours.... :smile: On a plus vingt ans :roll:
06/05/2002 @ 18:23:05: GoA: 
:no: :slurp:
07/05/2002 @ 11:39:07: watch: 
j'ai trouvé, c'est la manière dont est stockée un entier sous solaris qui est pas pareil chez Intel...


===> 4448 = 4448 chez Solaris
et 4448 = 4844 chez Intel


=> on doit faire un htons(4448)

ou le mettre sous forme de chaine de carcatère qu'on parse par la suite...


:roll:
07/05/2002 @ 16:35:09: GoA: 
Ben évidemment gros malin !!!!! :lol:

Je te l'avais mis dans le sample je te signales :smile:
07/05/2002 @ 16:43:08: watch: 
oups :roll:



j'parie que tu l'as rajouté par après :lol:


non j'rigole, merci en tout cas :smile:
Retour