2009-01-03 7 views
3

J'essaye d'écrire un programme qui utilise des sockets pour se connecter avec d'autres instances de lui-même sur le réseau. Depuis que je voudrais écrire une version de Windows, j'utilise actuellement des sockets BSD du côté d'OS X pour que je puisse m'assurer qu'il sera compatible avec la version (éventuelle) de Windows.Exécution d'un serveur socket dans Cocoa

La seule façon que j'ai pu faire fonctionner jusqu'à présent est si je spécifie mon adresse IP réelle lors de la création du socket serveur. Si j'utilise 127.0.0.1 à la place, je ne peux me connecter qu'à partir de ma machine locale.

Bien que cela soit bien en théorie, la question devient comment puis-je savoir quelle adresse IP utiliser? Je ne sais pas comment obtenir une adresse IP pour la machine actuelle via Cocoa, et même si je peux, et s'il y a plusieurs adresses IP valides (comme une connexion Airport et Ethernet, par exemple). Comment savoir lequel utiliser? Je pourrais demander à l'utilisateur, mais cela ne semble pas quelque chose qu'ils pourraient/devraient savoir.

Je peux fournir mon code de connexion client et serveur si nécessaire, mais étant donné que je peux établir une connexion depuis une machine distante, je pense que le problème ne se trouve pas dans mon code.

Nous vous remercions de votre temps. :)

Répondre

9

Utilisez 0.0.0.0 comme adresse IP pour l'écoute. Il va écouter sur toutes les adresses.

Probablement, une constante est définie pour cette adresse dans l'API de socket que vous utilisez. Si vous utilisez l'API C sockets standard, c'est INADDR_ANY.

+0

INADDR_ANY a fonctionné. Tyvm :) – Andy

4

Il existe un protocole de reconnaissance de réseau appelé Bonjour que vous pouvez utiliser pour publier vos serveurs sur le réseau, puis vos clients peuvent s'y connecter automatiquement. C'est multi-plateforme, mais généralement appelé zero-config sur d'autres systèmes.

4

Lors de la programmation d'une prise, consultez le guide de prise de Beej. Il a été autour pendant des siècles et couvre la plupart des bases.

http://beej.us/guide/bgnet/

Questions connexes