2010-06-29 5 views
2

J'essaie d'obtenir une adresse IP liée à receiveSock. Comment puis-je l'avoir.Comment obtenir une adresse IP à partir du socket

Ques 1:

ipEndReceive = new IPEndPoint(IPAddress.Any, receivePort); 
receiveSock = new Socket(AddressFamily.InterNetwork 
         , SocketType.Stream, ProtocolType.Tcp); 

receiveSock.Bind(ipEndReceive); 

Lorsque le code atteint la fonction Bind. Une erreur se produit

Argument non valide, le code d'erreur: 10022, Message: Un argument non valide a été fourni

Ques 2:

ipEndReceive = new IPEndPoint(IPAddress.Parse("127.0.0.1"), receivePort); 
receiveSock = new Socket(AddressFamily.InterNetwork 
         , SocketType.Stream, ProtocolType.Tcp);     
receiveSock.Bind(ipEndReceive); 

ErrorLog.WritetoErrorlog("\nRemote IP Address : " + ((IPEndPoint)receiveSock.RemoteEndPoint).Address.ToString() 

Quand j'essaye avec cette adresse IP . Il me montre la même erreur que ci-dessus

+0

@tanascius: merci de m'avoir fait prendre conscience de mon erreur. Je l'ai formaté maintenant. –

+0

thx, il est vraiment plus facile de lire et de répondre aux questions bien formatées ^^ – tanascius

Répondre

1

Tout d'abord, il semble que ce soit le point final local que vous voulez. Deuxièmement, lorsque vous spécifiez IPAddress.Any (0.0.0.0), vous indiquez explicitement que le Socket ne doit pas être lié à une interface particulière. Chaque adresse IP correspond exactement à une interface.

var s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 
s.Bind(new IPEndPoint(IPAddress.Any, somePort)); 
Trace.WriteLine(s.LocalEndPoint); // should be what you're looking for 

Le socket est lié et sera utilisé pour recevoir les connexions. Il n'a pas de RemoteEndPoint. Cela devrait être très clair car la méthode Accept renvoie un nouvel objet Socket qui représente la connexion entre deux points d'extrémité (local/distant).

Remarque: s'il s'agit d'une socket IPv4 (AddressFamily.InterNetwork), n'essayez pas de la lier à autre chose.

Consultez les documents sur MSDN, vous pouvez en apprendre plus sur la programmation Winsock typique (comme la classe Socket est juste un wrapper Winsock) là-bas.

+0

Thx pour l'explication. Pourriez-vous mettre de la lumière sur vos trois premières lignes. Je ne suis pas sûr de ce que vous essayez d'expliquer. ** Le socket ne doit pas être lié à une interface particulière ** Qu'est-ce que 'interface' représente ici –

+0

l'interface fait référence à un composant spécifique dans la pile réseau. votre ordinateur peut être connecté à Internet (ou au réseau local) de plusieurs façons. vous pouvez avoir plusieurs connexions (filaires et sans fil). chaque interface active représente une telle connexion et possède une adresse IP distincte. Lorsque vous tapez 'netsh interface ipv4 show addresses' vous obtenez une liste de toutes les interfaces réseau actuellement installées. Une telle interface est l'interface de bouclage qui a l'adresse IP statique '127.0.0.1'. Quand je dis pas d'interface particulière, je veux dire qu'une connexion peut être faite sur n'importe quelle interface. –

+0

Si votre ordinateur est une passerelle ou un pare-feu, vous pouvez restreindre l'accès de chaque côté du réseau en autorisant les connexions uniquement sur des interfaces spécifiques. Je crois que ceci se rapporte plus à la segmentation de réseau que votre question originale cependant. –

Questions connexes