private void ProcessPackage(IAsyncResult result) { UdpClient client = (UdpClient)result.AsyncState; IPEndPoint remote = null; byte[] bytes; try { bytes = client.EndReceive(result, ref remote); client.BeginReceive(ProcessPackage, client); } catch (ObjectDisposedException) // Closed already { return; } string ssdp; try { ssdp = Encoding.UTF8.GetString(bytes); } catch { return; } string[] lines = ssdp.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); var splited = lines.Select(l => l.Split(new string[] { ": " }, 2, StringSplitOptions.None)); Dictionary<string, string> dict = new Dictionary<string, string>(); foreach (var kv in splited) { if (kv.Length == 2) { dict.Add(kv[0], kv[1]); } } IntranetServer found = new IntranetServer(); if (!dict.ContainsKey("NT")) return; if (dict["NT"] != expectedSpecifier) return; if (!dict.ContainsKey("SERVER")) return; found.Name = dict["SERVER"]; if (!dict.ContainsKey("LOCATION")) return; int serverPort; if (!int.TryParse(dict["LOCATION"], out serverPort)) return; found.Location = new IPEndPoint(remote.Address, serverPort); if (FoundServer != null) { FoundServer(found); } }
private void ProcessPackage(IAsyncResult result) { UdpClient client = (UdpClient)result.AsyncState; IPEndPoint remote = null; byte[] bytes; try { bytes = client.EndReceive(result, ref remote); client.BeginReceive(ProcessPackage, client); } catch (ObjectDisposedException) // Closed already { return; } string ssdp; try { ssdp = Encoding.UTF8.GetString(bytes); } catch { return; } string[] lines = ssdp.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); var splited = lines.Select(l => l.Split(new string[] { ": " }, 2, StringSplitOptions.None)); Dictionary <string, string> dict = new Dictionary <string, string>(); foreach (var kv in splited) { if (kv.Length == 2) { dict.Add(kv[0], kv[1]); } } IntranetServer found = new IntranetServer(); if (!dict.ContainsKey("NT")) { return; } if (dict["NT"] != expectedSpecifier) { return; } if (!dict.ContainsKey("SERVER")) { return; } found.Name = dict["SERVER"]; if (!dict.ContainsKey("LOCATION")) { return; } int serverPort; if (!int.TryParse(dict["LOCATION"], out serverPort)) { return; } found.Location = new IPEndPoint(remote.Address, serverPort); if (FoundServer != null) { FoundServer(found); } }