Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1524 connectés 

  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  C# Socket LocalEndPoint : spécifier un port d'envoi (coté client)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

C# Socket LocalEndPoint : spécifier un port d'envoi (coté client)

n°1395968
Sagoth
:|
Posté le 27-06-2006 à 18:55:59  profilanswer
 

Bonjour à tous.
J'ai un petit pb sur les connexions socket en c#
 
J'ai un client qui se connecte sur un serveur (TCP, synchrone) via le code suivant :
 

Code :
  1. // Creation du IpEndPoint
  2. IPEndPoint myIpEndPoint = new IPEndPoint( GetIPfromDNS(ServerInfo)[0],ServerPort);
  3. // Init de la connexion
  4. this.SocketClient.BeginConnect(myIpEndPoint,new AsyncCallback(ConnectCallback),this.SocketClient);


 
La connexion est OK, les echanges se passent bien, etc etc ...
Maintenant, mon probleme est que si l'IP et le PORT du serveur sont bien défini, mon port d'envoi local est quant à lui aléatoire. Je n'arrive pas à en spécifier un de mon choix (même avec un bind !).
 
Savez vous comment forcer un port donnée au niveau client pour l'envoi des données ?
 
Merci d'avance !  :hello:
 
PS : avec le bind j'ai essayé la chose suivante mais avec cette version je n'arrive plus à me connecter au serveur
 

Code :
  1. // Initialisation de la socket de connexion sur le server
  2. this.SocketClient = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
  3. // Local EP
  4. System.Net.IPEndPoint myLocalEP = new IPEndPoint(GetIPfromDNS("127.0.0.1" )[0],4555);
  5. SocketClient.Bind(myLocalEP);
  6. // Remote EP
  7. IPEndPoint myIpEndPoint = new IPEndPoint( GetIPfromDNS(ServerInfo)[0],ServerPort);
  8. // Connexion  
  9. this.SocketClient.BeginConnect(myIpEndPoint,new AsyncCallback(ConnectCallback),this.SocketClient);


 
Je me doute bien que je dois me mélanger les pinceaux dans les bind et EndPoint mais je n'arrive pas à m'en dépatouiller  :cry:  :sweat:


Message édité par Sagoth le 27-06-2006 à 18:59:57
mood
Publicité
Posté le 27-06-2006 à 18:55:59  profilanswer
 

n°1396392
Sagoth
:|
Posté le 28-06-2006 à 11:21:47  profilanswer
 

Ok, pour info l'erreur vient du bind sur "127.0.0.1".
Il ne gere pas l'adresse de loopback, on doit spécifier la "vraie" adresse locale "10.226.xxx.xxx".
 
Je me heurte maintenant à un autre "pb".
Il est en effet impossible apres deconnexion et fermeture d'une socket donnée de se reconnecter sur cette même socket en raison d'un temps d'attente TCP.
 
Est il possible de contourner cette limitation ?  
A priori je ne pense pas dans la mesure où c'est un des principes du TCP/IP

n°1396397
_darkalt3_
Proctopathe
Posté le 28-06-2006 à 11:27:07  profilanswer
 

ouais c'est un truc pour empecher un grand nombre de connexion / déconnexion, genre attaque DoS (il me semble).
 
Pour le coup du timeout, on peut améliorer un peu la chose avec l'option SO_LINGER des setsockopt sous MFC, peut-être que ca se retrouve sous c#

n°1396636
moi23372
Posté le 28-06-2006 à 15:40:01  profilanswer
 

le temps d'attente dépend du système d'exploitation. Il n'est donc pas possible de contourner ce problème.  
 
Ce temps est nécessaire tout simplement pour être sure que tout les paquets qui aurait pu être envoyé sur le réseau soit bien détruit avant une nouvelle connection.

n°1397200
Sagoth
:|
Posté le 29-06-2006 à 13:58:42  profilanswer
 

Ok, thx pour les précisions messieurs  :jap:  
 
Disons que mon soucis est qu'en cas de déconexion sauvage (genre coupure réseau) le serveur en face (sur lequel je n'ai pas la main) ne déconnecte pas le client.
 
Du coup je voudrais contourner le problème en forçant de mon coté une déconnexion de celui ci au niveau serveur mais là encore je pense que c'est mort, dans la mesure ou pour le deconnecter il faudrait que je me ... reconnecte avec la meme socket (ce qui ne passera pas) :whistle:  :sarcastic:  :o.


Message édité par Sagoth le 29-06-2006 à 14:01:16
n°1397506
moi23372
Posté le 29-06-2006 à 22:24:27  profilanswer
 

normalement, si le serveur est bien programmé, il vera tout de suis la déconnexion :S

n°1399745
Sagoth
:|
Posté le 03-07-2006 à 20:22:39  profilanswer
 

moi23372 a écrit :

si le serveur est bien programmé


 
 :pfff:  :lol:  
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  C# Socket LocalEndPoint : spécifier un port d'envoi (coté client)

 

Sujets relatifs
Envoi Mail html avec inline imageSocket et Serialisation
les données d'une connexion client/serveurConnaitre le nom du poste client
redirection après envoi de donnéesEnvoi d'un formulaire-email dans des includes
[C] socket sur une plage d'adresse IPprobleme envoi mail avec php
[VBscript] Envoi de mailQuel langage pour site avec envoi de donnée dans une BDD ?
Plus de sujets relatifs à : C# Socket LocalEndPoint : spécifier un port d'envoi (coté client)


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR