J’essaie de créer une application netowrk. J’ai réussi à créer un serveur qui envoie et reçoit des paquets. Jusqu’à présent, les tests ont été effectués sur un ordinateur pointant vers 127.0.0.1 (aucun endroit comme chez nous). Maintenant, je veux passer au réseau. Comment trouver des ordinateurs sur un réseau LAN qui écoutent mon port spécifique?
Le service doit écouter les messages diffusés sur un port connu (si vous voulez être vraiment sage, vous pouvez enregistrer le programme et le numéro de port auprès de l’IANA ). Lorsqu’il entend un message diffusé, il répond à l’expéditeur à l’adresse IP du serveur et quel port le service écoute pour les connexions entrantes.
Voici un exemple simple tiré du lien ci-dessus. Il est simplement imprimé sur la console qui a connecté et sur quel port, mais vous pouvez utiliser ces informations pour établir une connexion TCP ou UDP entre les deux ordinateurs d’extrémité.
using System; using System.Net; using System.Net.Sockets; using System.Text; class RecvBroadcst { public static void Main() { Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); IPEndPoint iep = new IPEndPoint(IPAddress.Any, 9050); sock.Bind(iep); EndPoint ep = (EndPoint)iep; Console.WriteLine("Ready to receive…"); byte[] data = new byte[1024]; int recv = sock.ReceiveFrom(data, ref ep); ssortingng ssortingngData = Encoding.ASCII.GetSsortingng(data, 0, recv); Console.WriteLine("received: {0} from: {1}", ssortingngData, ep.ToSsortingng()); data = new byte[1024]; recv = sock.ReceiveFrom(data, ref ep); ssortingngData = Encoding.ASCII.GetSsortingng(data, 0, recv); Console.WriteLine("received: {0} from: {1}", ssortingngData, ep.ToSsortingng()); sock.Close(); } }
Comme exemple de psudo, voici la séquence d’événements sur la façon dont je le ferais.
Pour cet exemple, disons que nous avons un réseau avec une adresse IP de 192.168.1.0
et un sous-réseau de 255.255.255.0
. Nous avons deux serveurs, Server1
à 192.168.1.2
avec le service à l’écoute sur le port 1234
et Server2
à 192.168.1.3
avec un port à 4567
pour le service. Les deux sont listés sur le port 3000
pour les messages diffusés. Le client se connectant sera à l’IP 192.168.1.4
192.168.1.255:3000
) en utilisant le même port pour l’envoi à l’écoute. Il envoie une sorte de charge utile pour que les serveurs renvoient uniquement à vos clients, à la place de quelqu’un d’autre qui utilise le même port que vous. (Disons qu’il envoie la chaîne Send me your info for XYZ app!
) Send me your info for XYZ app!
et envoie le message UDP Name:Server1 IP:192.168.1.2 Port:1234
à la combinaison adresse IP et port source de l’expéditeur ( 192.168.1.4:50123
) Send me your info for XYZ app!
et envoie le message UDP Name:Server2 IP:192.168.1.3 Port:4567
Message Name:Server2 IP:192.168.1.3 Port:4567
retour au port source de l’expéditeur et à la combinaison IP ( 192.168.1.4:50123
)