public ServerFileInfoResponse GetServerResponse(IPEndPoint ipEndPoint, string hash) { ServerFileInfoResponse response = new ServerFileInfoResponse(); List<IPEndPoint> ipList = new List<IPEndPoint>(); Uri requestUri = new Uri(string.Format("http://{0}:{1}/filename|{2}", ipEndPoint.Address, ipEndPoint.Port, hash)); HTTPClient client = new HTTPClient(); string xml = client.DownloadString(requestUri); XDocument doc = XDocument.Parse(xml); var userlist = from user in doc.Descendants("User") select user; foreach (XElement element in userlist) { if(element.Attribute("IP") != null && element.Attribute("Port") != null) { string ipStr = element.Attribute("IP").Value; string portStr = element.Attribute("Port").Value; int port; IPAddress ip; if(int.TryParse(portStr, out port) && IPAddress.TryParse(ipStr, out ip)) { IPEndPoint endPoint = new IPEndPoint(ip, port); ipList.Add(endPoint); } } } response.IpList = ipList; var fileSize = doc.Descendants("FileSize"); if(fileSize.Count() != 0 && fileSize.First().Attribute("Size") != null) { long size; string sizeStr = fileSize.First().Attribute("Size").Value; if (long.TryParse(sizeStr, out size)) { response.FileSize = size; } } var blocks = doc.Descendants("Blocks"); if(blocks.Count() != 0 && blocks.First().Attribute("Number") != null) { int blockNum; string blockNumStr = blocks.First().Attribute("Number").Value; if(int.TryParse(blockNumStr, out blockNum)) { response.BlockNum = blockNum; } } return response; }