static void TestSend() { var ip = NetHelper.ParseAddress(Host); ISocketSession session = NetService.CreateSession(new NetUri(string.Format("Tcp://{0}:{1}", ip, Port))); try { session.Send(data); Interlocked.Add(ref SendBytes, data.Length); Interlocked.Increment(ref SendCounts); //WriteLine(string.Format("{0} 发送{1}字节,共{2}字节", DateTime.Now, data.Length, SendBytes)); var receive = session.Receive(); if (receive != null) { Interlocked.Add(ref ReceiveBytes, receive.Length); Interlocked.Increment(ref ReceiveCounts); } //WriteLine(string.Format("共接收{0}字节", ReceiveBytes)); } catch (Exception ex) { WriteLine(ex.ToString()); } session.Dispose(); }
/// <summary>数据返回</summary> /// <param name="session"></param> /// <param name="stream"></param> protected override void OnReceive(ISocketSession session, Stream stream) { string sss = stream.ToStr(); if (sss == "<policy-file-request/>\0") { session.Send(System.Text.Encoding.UTF8.GetBytes(_Policy.ToCharArray())); } session.Dispose(); return; }
/// <summary>接收处理</summary> /// <param name="session"></param> /// <param name="stream"></param> protected override void OnReceive(ISocketSession session, Stream stream) { var isTcp = session.Local.IsTcp; // 解析 var request = DNSEntity.Read(stream, isTcp); var response = Request(session, request); if (response != null) { response.Header.ID = request.Header.ID; Response(session, request, response); } session.Dispose(); }
/// <summary>收到数据时</summary> /// <param name="session"></param> /// <param name="stream"></param> protected override void OnReceive(ISocketSession session, Stream stream) { var remoteEP = session.Remote.EndPoint; var str = stream.ToStr(); WriteLog(""); WriteLog(remoteEP + "=>" + session.Local.EndPoint + " " + str); var ss = str.Split(":"); ss[0] = ss[0].ToLower(); if (ss[0] == "reg") { var name = ss[1]; INetSession ns = null; if (!Clients.TryGetValue(name, out ns)) { // 集合里面没有,认为是发起邀请方,做好记录 ns = new NetSession(); //ns.Server = sender as ISocketServer; ns.Session = session; //ns.ClientEndPoint = remoteEP; Clients[name] = ns; session.OnDisposed += (s, e2) => ns.Dispose(); ns.OnDisposed += (s, e2) => Clients.Remove(name); //session.Send("注册成功!你的公网地址是:" + client, null, client); session.Send("注册成功!你的公网地址是:" + remoteEP, null); WriteLog("邀请已建立:{0}", name); } else { // 如果连续注册两次可能会有问题,这里要处理一下 //if ("" + ns.ClientEndPoint == "" + remoteEP) // session.Send("Has Register!", null); //else { // 到这里,应该是被邀请方到来,同时响应双方 session.Send(remoteEP.ToString(), null); // 同时还要通知对方 ns.Session.Send(remoteEP.ToString(), null); WriteLog("邀请已接受:{0} {1} {2}", name, remoteEP, remoteEP); Clients.Remove(name); Thread.Sleep(1000); //session.Disconnect(); //if (ns.Session != null) ns.Session.Disconnect(); session.Dispose(); ns.Session.Dispose(); } } } else if (ss[0] == "invite") { INetSession ns = null; if (Clients.TryGetValue(ss[1], out ns)) { session.Send("invite:" + remoteEP, null); // 同时还要通知对方 ns.Session.Send("invite:" + remoteEP.ToString(), null); } else { session.Send("Not Found!", null); } } else { if (!str.Contains("P2P")) { session.Send("无法处理的信息:" + str, null); } } }