public static IPEndPoint GetEndPointAddress(string address) { var a = address.Trim(); // use deault if empty string if (string.IsNullOrEmpty(a)) { return(G.DefaultServerEndPoint); } // use 192.168.0.num if *.num when local ip address is 192.168.0.~ if (a.StartsWith("*.")) { var end = int.Parse(a.Substring(2)); var host = Dns.GetHostEntry(Dns.GetHostName()); foreach (var ip in host.AddressList) { if (ip.AddressFamily == AddressFamily.InterNetwork) { var abytes = ip.GetAddressBytes(); abytes[abytes.Length - 1] = (byte)end; return(new IPEndPoint(new IPAddress(abytes), G.DefaultServerEndPoint.Port)); } } } return(IPEndPointHelper.Parse(address, G.DefaultServerEndPoint.Port)); }
public IChannel Create(string address) { var type = Type; var connectEndPoint = ConnectEndPoint; var connectToken = ConnectToken; if (string.IsNullOrEmpty(address) == false) { var parts = address.Split('|'); // type|endpoint|{token} if (parts.Length < 2) { throw new ArgumentException(nameof(address)); } type = (ChannelType)Enum.Parse(typeof(ChannelType), parts[0], true); connectEndPoint = IPEndPointHelper.Parse(parts[1]); connectToken = parts.Length > 2 ? parts[2] : null; } switch (type) { case ChannelType.Tcp: var tcpChannel = new TcpChannel(CreateChannelLogger(), connectEndPoint, connectToken, PacketSerializer); InitializeChannel(tcpChannel); return(tcpChannel); case ChannelType.Udp: var udpChannel = new UdpChannel(CreateChannelLogger(), connectEndPoint, connectToken, PacketSerializer, (NetPeerConfiguration)UdpConfig); InitializeChannel(udpChannel); return(udpChannel); default: throw new InvalidOperationException("Unknown TransportType"); } }