Exemple #1
0
        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();
        }
Exemple #2
0
        /// <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;
        }
Exemple #3
0
        /// <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();
        }
Exemple #4
0
        /// <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);
                }
            }
        }