/// <summary> /// 处理反向连接请求(服务端) /// </summary> /// <param name="incomeClient"></param> /// <returns></returns> private async Task ProcessReverseRequest(SecurityTcpClient incomeClient) { var iClient = incomeClient.Client; try { var result = await incomeClient.AuthorizeAsync(); if (result == null) { return; //主动关闭 } if (!result.IsSuccess) { Server.Logger.Debug("SecurityTcpClient校验失败:" + incomeClient.ErrorMessage); await iClient.GetStream().WriteAsync(new byte[] { (byte)result.ResultState }); iClient.Close();//如果校验失败则发送一个字节的直接关闭连接 } else { Server.Logger.Debug("SecurityTcpClient校验成功!"); await iClient.GetStream().WriteAsync(new byte[] { (byte)result.ResultState }); } //读取头四个字节 byte[] bytes = new byte[4]; if (await iClient.GetStream().ReadAsync(bytes, 0, bytes.Length, Global.DefaultConnectTimeout) < 1) { Server.Logger.Debug("服务端read出错,关闭连接"); incomeClient.Client.Close(); return; } var clientIdAppId = GetAppFromBytes(bytes); Server.Logger.Debug("已获取到消息ClientID:" + clientIdAppId.ClientID + "AppID:" + clientIdAppId.AppID ); //分配 lock (_lockObject) { ServerContext.Clients[clientIdAppId.ClientID].GetApp(clientIdAppId.AppID) .PushInComeClient(iClient); } //var arg = new AppChangedEventArgs(); //arg.App = clientIdAppId; //AppTcpClientMapReverseConnected(this, arg); } catch (Exception e) { Logger.Debug(e); } }
public async Task ListenServiceClient(IDbOperator dbOp) { //侦听,并且构造连接池 Server.Logger.Debug("Listening client on port " + ServerContext.ServerConfig.ReversePort + "..."); TcpListener listener = new TcpListener(IPAddress.Any, ServerContext.ServerConfig.ReversePort); listener.Start(1000); while (true) { SecurityTcpClient incomeClient = await listener.AcceptSecureTcpClientAsync(dbOp); Server.Logger.Debug("已建立一个空连接" + incomeClient.Client.Client.LocalEndPoint.ToString() + "-" + incomeClient.Client.Client.RemoteEndPoint.ToString()); incomeClient.Client.SetKeepAlive(out _); _ = ProcessReverseRequest(incomeClient); } }