0

我正在编写一个应用程序来测试与一组 VM Windows 2003 服务器的 RDP 连接。典型的故障模式是服务器上运行的某些代码使自己陷入循环,从而阻止 RDP 连接 - 以及大多数其他类型的连接。发生这种情况时,您仍然可以 ping 服务器,而且似乎没问题,但您不能做任何其他事情。

我正在使用 C#、.NET 3.5 和 RDP 6.1 版——我曾尝试启动 ActiveX RDP 客户端 (MSTSC..),但这需要人工干预并且效果不佳。我在这里找到了另一个帖子,其中有来自 Expert Sexchange 的可能解决方案,但该解决方案使用 Java 和 Net::Telnet 库,我无权访问。

.NET 阵营的任何想法?

谢谢,戴夫

4

2 回答 2

0

使用TCPClient尝试连接到 3389(或您配置的任何端口)上的服务器,如果您获得连接,则断开连接并报告成功,如果连接被拒绝则报告失败。

 class Program
    {
       static void Main(string[] args)
        {
            RDPAvailable("someserver", 3389);
        }
        public static bool RDPAvailable(string remoteHost, int port)
        {
            bool available=false;
            try
            {
                TcpClient client = new TcpClient(remoteHost, port);
                client.Close();
                available = true;
            }
            catch (Exception ex)
            {
                //do some logging or whatnot 
            }
            return available;
    }

编辑:一些方便的代码

MsRdpClient51.Server = somServer
MsRdpClient51.UserName = somUserID
MsRdpClient51.Domain = someDomain
MsRdpClient51.AdvancedSettings6.ClearTextPassword = somePassword
MsRdpClient51.Connect
于 2009-08-13T18:32:57.923 回答
0

您可以使用未记录的WinStationServerPing API 检查与终端服务器的连接。基本上,如果此功能成功,则意味着终端服务器可用。

这是函数的 (Delphi) 签名(从 winsta.dll 导出):

function WinStationServerPing(hServer: HANDLE): BOOLEAN; stdcall;
于 2009-09-27T19:06:33.783 回答