我正在开发一个程序,它将图像从一台计算机发送到另一台计算机(类似于没有鼠标/键盘输入的远程协助)。我用来测试的两台计算机是一台 Windows XP 机器和一台 Windows Vista。我有一台直接连接到路由器的固定 XP 机器,以及一台通过无线连接的笔记本电脑。
从 XP 到 Vista 的传输效果很好,我能够获得在 Vista 上显示的恒定图像流。但是,当我翻转它并将图像从 Vista 发送到 XP 时,它不起作用。我还尝试了本地“复制”,即在没有网络的情况下获取图像流,这适用于 Vista 和 XP。这是两台机器上完全相同的程序。
我认为这并不重要,但我使用 GDI+ 来处理图像。所以我通过网络上的流发送一个 .jpg 并在另一端重建它。
我的网络消息类称为NetMsg
。它由 achar* type
和 a组成char* data
。类型决定了我如何解释数据,这里没有问题。
我们将计算机称为#1 和#2。
当创建连接并且我在#1 上标记了要发送的区域时:
001> #1 发送类型 RESIZE // 以使#2 上的窗口与我在#1 上标记的区域大小相同
002> #1发送类型 PICTURE_DATA // 这是实际的图像数据
003> #2 收到上述两条消息后,发送类型 REQUEST_MORE // #2 想要更多图像数据
004> #转到步骤 1
在将图像数据从 XP 发送到 Vista 时,我什至都懒得调试它,因为它工作得很好,完全符合我的要求。但是,当 Vista 发送到 XP 时,我注意到以下内容:
- 接收到的数据实际上可以是两个
NetMsgs
。我通过将数据分成几个来支持这一点NetMsgs
- 收到的数据可能不完整,即我必须等待更多数据。我通过将 a 标记
NetMsg
为不完整并在下一次数据传输时完成它来支持这一点。(以及第一步的组合)
这几乎成功了,因为我正确传输了一些图像,但是它突然停止了。我没有彻底调试过,所以我不知道为什么数据突然停止了。但是:
我不明白的是,这在从 XP 发送到 Vista 时效果很好,但反之则不行。我错过了什么?
如果您需要提取代码,请告诉我,但是,它非常庞大......大约 500 行.. 否则,我正在寻找从 Vista 向 XP 发送数据时的已知问题。