Comment définir un délai d'attente de la Prise.ConnectAsync?

J'ai lu sur la façon de rechercher tous les serveur d'écoute sur un port spécifique sur LAN et enfin, j'ai écrit un peu de code que ça fonctionne comme je veux.

Je suis en utilisant le Système.Le filetage.Les tâches.En parallèle à se connecter à tous les 254 Adresses IP aussi vite que possible

ex : 192.168.1.1 - 192.168.1.254

Ce dont j'ai besoin est de définir un délai d'attente pour ces tentatives de connexion, car il faut environ 15 à 20 secondes pour imprimer : "Échec de la Connexion" quand il ne parvient pas .. donc Comment dois-je faire?

Voici le Code Client:

static void Main(string[] args)
    {
        Console.WriteLine("Connecting to IP addresses has started. \n");

        Parallel.For(1, 255, i =>
        {
            Connect("192.168.1." + i);
        });
        Console.ReadLine();
    }

    private static void Connect(string ipAdd)
    {
        Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        SocketAsyncEventArgs e = new SocketAsyncEventArgs();
        IPEndPoint ipEnd = new IPEndPoint(IPAddress.Parse(ipAdd), 9990);
        e.RemoteEndPoint = ipEnd;
        e.UserToken = s;
        e.Completed += new EventHandler<SocketAsyncEventArgs>(e_Completed);
        Console.WriteLine("Trying to connect to : " + ipEnd);
        s.ConnectAsync(e);
    }
    private static void e_Completed(object sender, SocketAsyncEventArgs e)
    {
        if (e.ConnectSocket != null)
        {
            StreamReader sr = new StreamReader(new NetworkStream(e.ConnectSocket));
            Console.WriteLine("Connection Established : " + e.RemoteEndPoint + " PC NAME : " + sr.ReadLine());
        }
        else
        {
            Console.WriteLine("Connection Failed : " + e.RemoteEndPoint);
        }
    }

Code Serveur:

static void Main(string[] args)
    {
        Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        IPEndPoint ep = new IPEndPoint(IPAddress.Any,9990);
        server.Bind(ep);
        server.Listen(100);
        Socket client = server.Accept();
        NetworkStream stream = new NetworkStream(client);
        StreamWriter sw = new StreamWriter(stream)
        sw.WriteLine(System.Environment.MachineName);
        sw.Flush();
        sw.Dispose();
        stream.Dispose();
        client.Dispose();
        server.Dispose();
    }

Si il n'y a aucun soupçon ou de la notification qui le fait mieux s'il vous plaît dites-moi. Je suis à l'aide de [.Net 4.0] Sockets TCP

Désolé pour mon mauvais anglais et merci d'avance..

15-20 secondes semble raisonnable pour une tentative de connexion et très bon pour 254 tentatives. Mon navigateur passe plus que dans " tourne la flèche vers le mode si le serveur est en panne.
En fait, en 20 secondes, c'est beaucoup trop court si le lien a un modem d'accès à distance. Heureusement, de telles horreurs ont presque tous disparu.
c'est un réseau local comme je l'ai mentionné .. la plupart des jeux et des application qui affiche des hôtes disponibles .. donner le résultat en moins de 10 secondes. comme [pc n'importe où, netsupport, la demi-vie ..etc] je sais qu'ils ont une meilleure utilisation de l'algorithme et les façons de s' .. mais j'en ai besoin dans un court laps de temps
Je ne vois pas beaucoup de mal avec votre anglais 🙂

OriginalL'auteur Murhaf Sousli | 2012-03-16