using System; using System.Drawing; using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.RegularExpressions; using System.Net; namespace Misc { //字符串转换 public class StringConverter { private const string blank = @"\s*"; private const string num = @"\d+"; public static Size ToSize(string s) { string RegexText = @"\{" + blank + "Width" + blank + "=" + blank + num + blank + "," + blank + "Height" + blank + "=" + blank + num + blank + @"\}"; Regex regex = new Regex(RegexText); Match match = regex.Match(s); if (match.Success) { s = match.Value; regex = new Regex(num); MatchCollection matches = regex.Matches(s); string[] ss = new string[matches.Count]; for (int i = 0; i < ss.Length; i++) { ss[i] = matches[i].Value; } Size size = new Size(int.Parse(ss[0]), int.Parse(ss[1])); return size; } else { return Size.Empty; } } public static Rectangle ToRectangle(string s) { string RegexText = @"\{" + blank + "X" + blank + "=" + blank + num + blank + "," + blank + "Y" + blank + "=" + blank + num + blank + "," + blank + "Width" + blank + "=" + blank + num + blank + "," + blank + "Height" + blank + "=" + blank + num + blank + @"\}"; Regex regex = new Regex(RegexText); Match match = regex.Match(s); if (match.Success) { s = match.Value; regex = new Regex(num); MatchCollection matches = regex.Matches(s); string[] ss = new string[matches.Count]; for (int i = 0; i < ss.Length; i++) { ss[i] = matches[i].Value; } Rectangle rect = new Rectangle( int.Parse(ss[0]), int.Parse(ss[1]), int.Parse(ss[2]), int.Parse(ss[3])); return rect; } else { return Rectangle.Empty; } } // 摘要: // 将主机名或 IP 地址解析为 IPEndPoint 实例。 public static IPEndPoint ToIPEndPoint(string hostNameOrAddress) { if (string.IsNullOrEmpty(hostNameOrAddress)) return null; string[] s = hostNameOrAddress.Split(new char[] { ':' }, StringSplitOptions.RemoveEmptyEntries); if (s.Length == 1) { IPAddress ip; int port = 20006; try { ip = IPAddress.Parse(s[0]); } catch { try { IPAddress[] ips = System.Net.Dns.GetHostEntry(s[0]).AddressList; if (ips.Length == 1) ip = ips[0]; else ip = IPAddress.Parse("127.0.0.1"); } catch { return null; } } return new IPEndPoint(ip, port); } else if (s.Length == 2) { IPAddress ip; int port; try { port = int.Parse(s[1]); } catch { return null; } try { ip = IPAddress.Parse(s[0]); } catch { try { IPAddress[] ips = System.Net.Dns.GetHostEntry(s[0]).AddressList; if (ips.Length == 1) ip = ips[0]; else ip = IPAddress.Parse("127.0.0.1"); } catch { return null; } } return new IPEndPoint(ip, port); } return null; } // 摘要: // 将主机名或 IP 地址解析为 IPEndPoint 实例。 public static IPEndPoint ToIPEndPoint(string hostNameOrAddress, IPAddress default_address, int default_port) { IPAddress ip = default_address; int port = default_port; if (string.IsNullOrEmpty(hostNameOrAddress)) { return new IPEndPoint(ip, port); } string[] s = hostNameOrAddress.Split(new char[] { ':' }, StringSplitOptions.RemoveEmptyEntries); if (s.Length == 1) { try { ip = IPAddress.Parse(s[0]); } catch { try { IPAddress[] ips = System.Net.Dns.GetHostEntry(s[0]).AddressList; if (ips.Length == 1) ip = ips[0]; } catch { } } } else if (s.Length == 2) { try { port = int.Parse(s[1]); } catch { } try { ip = IPAddress.Parse(s[0]); } catch { try { IPAddress[] ips = System.Net.Dns.GetHostEntry(s[0]).AddressList; if (ips.Length == 1) ip = ips[0]; } catch { } } } return new IPEndPoint(ip, port); } public static string IPEndPoint2DirectoryName(IPEndPoint ipep) { return ipep.Address.ToString() + "_" + ipep.Port.ToString(); } } }