TightVNC 2.0.4 Connection Closed问题

本文介绍了在使用TightVNC时遇到的Connection Closed问题,详细分析了问题原因,发现服务器在创建桌面对象时返回NULL,导致异常并关闭连接。具体涉及RfbClient::execute函数及InputInjector::resetModifiers方法中的SendInput函数模拟VK_LWIN键失败。解决方案是注释掉模拟VK_LWIN的代码,从而临时解决问题。建议进一步探究SendInput失败的根本原因。
摘要由CSDN通过智能技术生成

症状(SYMPTOM):

 服务端tvnserver-2.0.4,客户端tvnviewer-1.5.4,采用vs2010编译,操作系统为WinXP SP2/SP3。客户端在连接并且通过验证后报Connection Closed。该问题与验证方式、服务端屏幕分辨率等无关。该症状不是必然发生在每台机器上,经测试,部分环境下不会出现,但没有得到精确地规律。

原因(CAUSE):

 经查,该症状是由于服务器在验证客户端后为客户端创建桌面对象时,返回NULL,服务器主动断开了客户端的连接所致,见RfbClient.cpp文件的RfbClient::execute函数,代码如下:
 void RfbClient::execute(){
   ...
   m_desktop = m_extAuthListener->onClientAuth(this);
   ...
  }
 RfbClient是RFB协议的客户端类,服务器为每个RFB客户端创建一个RfbClient对象,每个对象有一个工作线程,RfbClient::execute是工作线程方法。m_desktop返回NULL,导致抛出异常,服务器主动关闭连接。继续跟踪,调用路径(调用栈)如下:
  Thread::threadProc()
  RfbClient::execute()---(rfb-sconn工程的RfbClient.cpp)
  RfbClientManager::onClientAuth()---(RfbClientManager.cpp)
  WinDesktop::WinDesktop()---(WinDesktop.cpp)
 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值