/// <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); }