示例#1
0
    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));
    }
示例#2
0
        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");
            }
        }