套接字编程Xp> Vista,Vista> XP

时间:2010-02-09 19:39:52

标签: c++ windows-vista windows-xp winsock2

我正在开发一个程序,将图像从一台计算机发送到另一台计算机(类似于没有鼠标/键盘输入的远程协助)。我用来测试它的两台电脑是一台Windows XP机器和一台Windows Vista。我有固定的XP机器直接连接到路由器,笔记本电脑通过无线连接。

从XP到Vista的传输效果很好,我能够获得在Vista上显示的恒定图像流。但是,当我翻转并将图像从Vista发送到XP时,它无法正常工作。我也试过一个本地“副本”,也就是说,没有网络获得图像流,这适用于Vista和XP。它是两台机器上完全相同的程序。

我认为这不重要,但我正在使用GDI +来拍摄图片。所以我通过网络上的流发送一个.jpg,然后在另一边重建它。

我的网络消息类称为NetMsg。它由char* typechar* data组成。这些类型决定了我如何解释数据,这里没有问题 我们称之为计算机#1和#2 创建连接后,我在#1上标记了我要发送的区域:
001> #1发送类型RESIZE //以使#2上的窗口与我在#1上标记的区域大小相同 002> #1发送类型PICTURE_DATA //这是实际的imagedata
003> #2收到上述两条消息后,发送类型REQUEST_MORE //#2想要更多imagedata
004> #go到第1步

在将图像数据从XP发送到Vista时,我甚至没有费心去调试它,因为它工作得很好,就像我想要的那样。然而,当Vista发送到XP时,我注意到以下内容:

  • 收到的数据实际上可能是两个NetMsgs。我通过将数据拆分为多个NetMsgs
  • 来支持这一点
  • 收到的数据可能不完整,即我必须等待更多数据。我通过将NetMsg标记为不完整并在下一个数据传输完成它来支持此操作。 (以及第一步的组合)

这几乎可以解决问题,因为我正确地传输了一些图像,然后它突然停止了。我没有彻底调试这个,所以我不知道为什么数据突然停止了..但是:

我不明白的是,当从XP发送到Vista而不是相反时,这很有用。我错过了什么?

如果您需要代码提取,请告诉我,但是,它非常庞大...大约500行..否则我在寻找从Vista发送数据到XP的已知问题。

感谢任何帮助和/或反馈!

3 个答案:

答案 0 :(得分:0)

很难确切地说出任何事情。但是,我强烈建议您为程序编写测试套件并实现一个能够捕获此特定问题的测试用例。这将使您更容易重现故障,并且尝试生成可以证明问题的最小测试用例通常非常有启发性。此外,当您拥有(全自动)测试用例时,也可以更方便地向其他人寻求帮助。

答案 1 :(得分:0)

您真正需要做的是更详细地描述问题。可能有100个原因导致“它不起作用”。

您是否收到任何数据?

尝试发送几个字节,它们可以通过吗?

如果没有通过,请尝试使用Wireshark,Vista是否将数据发送出去?

XP接收了吗?

这里没有魔力,你必须从头到尾检查数据路径。

答案 2 :(得分:0)

实际上它在两台计算机上都是阻塞的,两者都在等待对方的响应。