/// <summary>根据远程网络标识创建客户端</summary> /// <param name="remote"></param> /// <returns></returns> public static ISocketClient CreateRemote(this NetUri remote) { if (remote == null) throw new ArgumentNullException("remote"); switch (remote.Type) { case NetType.Tcp: var tcp = new TcpSession { Remote = remote }; return tcp; case NetType.Udp: var udp = new UdpServer { Remote = remote, UseReceiveAsync = true }; return udp; default: throw new NotSupportedException("不支持{0}协议".F(remote.Type)); } }
static void Test15() { //"我是超级大石头!".Speak(); var tcp = new TcpSession(); tcp.Log = XTrace.Log; tcp.Remote = "tcp://127.0.0.1:8"; //tcp.MessageDgram = true; tcp.AutoReconnect = 0; //tcp.Send("我是大石头!"); tcp.Open(); //tcp.Stream = new PacketStream(tcp.Stream); //var ms = new MemoryStream(); for (int i = 0; i < 10; i++) { tcp.Send("我是大石头{0}!".F(i + 1)); //var buf = "我是大石头{0}!".F(i + 1).GetBytes(); //ms.WriteEncodedInt(buf.Length); //ms.Write(buf); } //ms.Position = 0; //tcp.Client.GetStream().Write(ms); while (tcp.Active) { var str = tcp.ReceiveString(); Console.WriteLine(str); } //NetHelper.Debug = true; //var server = new StunServer(); //server.Start(); //Console.WriteLine(NetHelper.MyIP().GetAddress()); //Console.WriteLine(IPAddress.Any.GetAddress()); //Console.WriteLine(IPAddress.Loopback.GetAddress()); //var buf = NetHelper.MyIP().GetAddressBytes(); //buf[3] = 33; //Console.WriteLine(new IPAddress(buf).GetAddress()); //var ip = NetHelper.ParseAddress("dg.newlifex.com"); //Console.WriteLine(ip.GetAddress()); //Console.WriteLine(Ip.GetAddress(ip.ToString())); //var client = new StunClient(); //var rs = client.Query(); //if (rs != null) //{ // //if (rs != null && rs.Type == StunNetType.Blocked && rs.Public != null) rs.Type = StunNetType.Symmetric; // XTrace.WriteLine("网络类型:{0} {1}", rs.Type, rs.Type.GetDescription()); // XTrace.WriteLine("公网地址:{0} {1}", rs.Public, Ip.GetAddress(rs.Public.Address.ToString())); //} }
/// <summary>根据本地网络标识创建客户端</summary> /// <param name="local"></param> /// <returns></returns> public static ISocketClient CreateClient(this NetUri local) { if (local == null) throw new ArgumentNullException("local"); switch (local.Type) { case NetType.Tcp: var tcp = new TcpSession { Local = local }; return tcp; case NetType.Udp: var udp = new UdpServer { Local = local, UseReceiveAsync = true }; return udp; default: throw new NotSupportedException("不支持{0}协议".F(local.Type)); } }