Exemple #1
0
        /// <summary>
        /// Locates BroadcastServers on the network identified by the specified Guid
        /// </summary>
        /// <param name="serviceId">Unique identifier for the requested server.</param>
        /// <param name="groupAddress">Group address to broadcast on.</param>
        /// <param name="serverPort">Port to broadcast on.</param>
        /// <param name="millisecondTimeout">Time (in milliseconds) to wait for responses from remote server.</param>
        /// <returns>An array of ServerResponse structures.</returns>
        public static ServerResponse[] FindServer(Guid serviceId, IPAddress groupAddress, int serverPort, int millisecondTimeout)
        {
            UdpClient sender = new UdpClient();

            // Construct datagram
            byte[]     request = serviceId.ToByteArray();
            IPEndPoint groupEP = new IPEndPoint(groupAddress, serverPort);

            // Send the message
            sender.Send(request, request.Length, groupEP);

            // Accumulate responses in thread
            ResponseHandler h  = new ResponseHandler(ResponseHandlerImpl);
            IAsyncResult    ar = h.BeginInvoke(sender, serviceId, null, null);

            // Wait for mullisecondTimeout milliseconds then close socket
            Thread.Sleep(millisecondTimeout);
            sender.Close();

            // Return the results
            ServerResponse[] r = h.EndInvoke(ar);
            return(r);
        }