Souvenirs » client-socket en C
Catégorie:  
   
client-socket en C
Publié le 06/05/2002 @ 17:17:59,
Par watch
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)
   
Publié le 06/05/2002 @ 17:28:21,
Par 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: )
   
Publié le 06/05/2002 @ 17:33:07,
Par 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: )
   
Publié le 06/05/2002 @ 17:35:03,
Par 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:
   
Publié le 06/05/2002 @ 17:38:16,
Par GoA
Ben il me semble qu'avec ce que t'as la t'as suffisement d'infos pour tirer ton plan :sol:
   
Publié le 06/05/2002 @ 17:43:35,
Par 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
   
Publié le 06/05/2002 @ 17:52:14,
Par 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...

Dernière édition: 06/05/2002 @ 17:54:16
   
Publié le 06/05/2002 @ 17:53:54,
Par watch
je vais rechecker demain... :smile: je te dirai quoi (meme si t'en auras rien a fouttre :wink: )
   
Publié le 06/05/2002 @ 17:56:05,
Par 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:
   
Publié le 06/05/2002 @ 18:08:05,
Par watch
ta station météo c'était pas en C??? ou en Delphi, je sais plus maintenant...
   
Publié le 06/05/2002 @ 18:15:55,
Par 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:
   
Publié le 06/05/2002 @ 18:17:07,
Par 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:
   
Publié le 06/05/2002 @ 18:23:05,
Par GoA
:no: :slurp:
   
Publié le 07/05/2002 @ 11:39:07,
Par 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:
   
Publié le 07/05/2002 @ 16:35:09,
Par GoA
Ben évidemment gros malin !!!!! :lol:

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



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


non j'rigole, merci en tout cas :smile:
Répondre - Catégorie:  
Informaticien.be - © 2002-2024 AkretioSPRL  - Generated via Kelare
The Akretio Network: Akretio - Freedelity - KelCommerce - Votre publicité sur informaticien.be ?