コード例 #1
0
        static void Main(string[] args)
        {
            {
                try
                {
                    _server       = new ServerModel();
                    _serverThread = new Thread(_server.Listen);
                    _serverThread.Start();

                    _listener = new ListenerModel("127.0.0.1", 8888, _server.Context);
                    _listener.Connect();

                    var command = new SendValidatorKeyCommand();
                    _listener.SendCommand(command);
                }
                catch (Exception ex)
                {
                    _server.Disconnect();
                    Console.WriteLine(ex.Message);
                }
            }
        }
コード例 #2
0
        private void Back(IAsyncResult ar)
        {
            TcpListener lisn = (TcpListener)ar.AsyncState;

            if (!lisn.Server.IsBound)
            {
                return;
            }
            TcpClient ct;

            try
            {
                ct = lisn.EndAcceptTcpClient(ar);
            }
            catch
            {
                OnLog("服务器异常退出");
                return;
            }
            var           stream = ct.GetStream();
            var           buffer = new byte[BufferSize];
            ListenerModel model  = new ListenerModel(ct, stream);

            try
            {
                stream.BeginRead(buffer, 0, BufferSize, arstream =>
                {
                    var md        = (ListenerModel)arstream.AsyncState;
                    var endstream = md.NetStream;
                    var client    = md.Client;
                    if (!_isListener)
                    {
                        endstream.Dispose();
                        client.Close();
                        return;
                    }
                    int len;
                    try
                    {
                        len = endstream.EndRead(arstream);
                    }
                    catch
                    {
                        OnLog(string.Format("客户端:{0} 连接失败", client.Client.RemoteEndPoint));
                        return;
                    }
                    var msg = Coding.GetString(buffer, 0, len);

                    BaseClient myclient;
                    if (msg.Contains("Sec-WebSocket-Key"))
                    {
                        //封装WebSocket握手协议
                        var clientMsg = PackageHandShakeData(buffer, len);
                        //发送握手协议
                        endstream.Write(clientMsg, 0, clientMsg.Length);

                        myclient = new ServerWebClient(client, ClientType.WebSocket);
                        PushClient(myclient);
                    }
                    else if (msg.Contains(Mark))
                    {
                        msg   = msg.Remove(msg.Length - 1, 1);
                        var x = JsonHelper.Deserialize <Record>(msg);
                        if (x.Type != ComdType.Identity)
                        {
                            return;
                        }
                        var clientType = (ClientType)int.Parse(x.Data);
                        myclient       = new ServerClient(client, clientType);
                        PushClient(myclient);
                    }
                    else
                    {
                        endstream.Close();
                        client.Close();
                    }
                    Array.Clear(buffer, 0, buffer.Length); // 清空缓存,避免脏读
                }, model);
            }
            catch
            {
                OnLog(string.Format("客户端:{0} 连接失败", ct.Client.RemoteEndPoint));
            }
            try
            {
                lisn.BeginAcceptTcpClient(Back, lisn);
            }
            catch
            {
                OnLog("服务器异常退出");
            }
        }