我正在编写一个应用程序来测试与一组VM Windows 2003服务器的RDP连接。典型的故障模式是服务器上运行的某些代码使自己处于循环中,从而阻止RDP连接 - 以及大多数任何其他类型的连接。当发生这种情况时,您仍然可以ping服务器,它似乎没问题,但是你不能做其他任何事情。
我正在使用C#,.NET 3.5和RDP版本6.1 - 我尝试启动ActiveX RDP客户端(MSTSC ..),但这需要人工干预并且不能很好地工作。我在这里找到了另一篇文章,其中有一个可能来自Expert Sexchange的解决方案,但该解决方案使用了Java和我无法访问的Net :: Telnet库。
来自.NET阵营的任何想法?
谢谢, 戴夫
答案 0 :(得分: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
答案 1 :(得分:0)
您可以使用未记录的WinStationServerPing API来检查与终端服务器的连接。基本上,如果此功能成功,则意味着终端服务器可用。
这是函数的(Delphi)签名(从winsta.dll导出):
function WinStationServerPing(hServer: HANDLE): BOOLEAN; stdcall;