static void Test6() { // UDP没有客户端服务器之分。推荐使用NetUri指定服务器地址 var udp = new UdpServer(); udp.Remote = new NetUri("udp://smart.peacemoon.cn:7"); udp.Received += (s, e) => { XTrace.WriteLine("收到:{0}", e.ToStr()); }; udp.Open(); udp.Send("新生命团队"); udp.Send("学无先后达者为师!"); // Tcp客户端会话。改用传统方式指定服务器地址 var tcp = new TcpSession(); tcp.Remote.Host = "smart.peacemoon.cn"; tcp.Remote.Port = 13; tcp.Open(); var str = tcp.ReceiveString(); XTrace.WriteLine(str); // 产品级客户端用法。直接根据NetUri创建相应客户端 var client = new NetUri("tcp://smart.peacemoon.cn:17").CreateRemote(); client.Received += (s, e) => { XTrace.WriteLine("收到:{0}", e.ToStr()); }; client.Open(); Thread.Sleep(1000); }
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())); //} }
void client_Received(Object sender, ReceivedEventArgs e) { //WriteLog("数据到来:{0} {1}", e.RemoteIPEndPoint, e.GetString()); //var ss = e.GetString().Split(":"); var ss = e.Stream.ToStr().Split(":"); if (ss == null || ss.Length < 2) { return; } IPAddress address = null; if (!IPAddress.TryParse(ss[0], out address)) { return; } var port = 0; if (!Int32.TryParse(ss[1], out port)) { return; } var ep = new IPEndPoint(address, port); ParterAddress = ep; Client.Dispose(); var server = Server; //Random rnd = new Random((Int32)DateTime.Now.Ticks); Thread.Sleep(Rand.Next(0, 2000)); var client = new TcpSession(); Client = client; //client.Address = server.LocalEndPoint.Address; //client.Port = server.LocalEndPoint.Port; //client.ReuseAddress = true; client.Local.EndPoint = server.Local.EndPoint; Console.WriteLine("准备连接对方:{0}", ep); try { //client.Connect(ep); client.Received += client_Received2; client.Open(); Client.Send("Hello!"); } catch (Exception ex) { WriteLog(ex.Message); } }
/// <summary>登录。发送Bind指令,接收Bind_Resp响应</summary> /// <returns></returns> public Boolean Login() { WriteLog(String.Format("正在连接服务器…… {0}:{1}", IP, Port)); var client = new TcpSession(); Client = client; try { //client.Connect(IP, Port); //client.Connect(IP, Port); client.Remote.Host = IP; client.Remote.Port = Port; } catch (Exception ex) { var str = IP + ":" + Port.ToString(); throw new XException("连接网关服务器" + str + "出错,请确定网络是否畅通!" + ex.Message, ex); } var cmd = new SGIPBind(); cmd.LoginName = SystemID; cmd.LoginPassowrd = Password; cmd.LoginType = LoginTypes.SpToSmg; WriteLog("正在登录……"); var session = client as ISocketSession; session.Send(cmd.GetStream().ReadBytes()); var pk = client.Receive(); var resp = SGIPEntity.Read(pk.GetStream()) as SGIPResponse; if (resp == null) { throw new Exception("登录失败!服务器没有响应!"); } if (resp.Result != SGIPErrorCodes.Success) { throw new Exception("登录失败!" + resp.Result.GetDescription()); } //登录完成,开始读取指令 client.Received += Client_Received; client.Open(); Logined = true; WriteLog("登录成功!"); return(true); }
static void Test6() { var pfx = new X509Certificate2("../newlife.pfx", "newlife"); //Console.WriteLine(pfx); //using var svr = new ApiServer(1234); //svr.Log = XTrace.Log; //svr.EncoderLog = XTrace.Log; //var ns = svr.EnsureCreate() as NetServer; using var ns = new NetServer(1234) { Name = "Server", ProtocolType = NetType.Tcp, Log = XTrace.Log, SessionLog = XTrace.Log, SocketLog = XTrace.Log, LogReceive = true }; ns.EnsureCreateServer(); foreach (var item in ns.Servers) { if (item is TcpServer ts) { ts.Certificate = pfx; } } ns.Received += (s, e) => { XTrace.WriteLine("收到:{0}", e.Packet.ToStr()); }; ns.Start(); using var client = new TcpSession { Name = "Client", Remote = new NetUri("tcp://127.0.0.1:1234"), SslProtocol = SslProtocols.Tls, Log = XTrace.Log, LogSend = true }; client.Open(); client.Send("Stone"); Console.ReadLine(); }
/// <summary>连接文件服务器</summary> /// <param name="hostname"></param> /// <param name="port"></param> public void Connect(String hostname, Int32 port) { if (Client == null) { var tcp = new TcpSession(); //tcp.UseProcessAsync = false; // 因为第一个包发送文件头,所以必须在一个会话里面完成文件传输,不能使用断线重连 tcp.AutoReconnect = 0; tcp.ThrowException = true; Client = tcp; tcp.Remote.Port = port; tcp.Remote.Host = hostname; tcp.Open(); } }
void EnsureClient() { EnsureServer(); if (Client == null) { var server = Server; var client = new TcpSession(); Client = client; //client.Address = server.LocalEndPoint.Address; //client.Port = server.LocalEndPoint.Port; //client.ReuseAddress = true; //client.Connect(HoleServer); //var session = client.CreateSession(); var session = client as ISocketSession; session.Received += client_Received; client.Open(); } }