【问题标题】:Socket programming Xp > Vista, Vista > XP套接字编程 Xp > Vista, Vista > XP
【发布时间】:2010-02-09 19:39:51
【问题描述】:

我正在开发一个程序,它将图像从一台计算机发送到另一台计算机(类似于没有鼠标/键盘输入的远程协助)。我用来测试的两台计算机是一台 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 上标记 // 这是收到上述两条消息后的实际图像数据
003>#2 , 发送类型 REQUEST_MORE // #2 想要更多图像数据
004>#转到步骤 1

在将图像数据从 XP 发送到 Vista 时,我什至都懒得调试它,因为它工作得很好,完全符合我的要求。然而,当 Vista 发送到 XP 时,我注意到以下内容:

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

这几乎成功了,因为我正确传输了一些图像,但是它突然停止了。我没有彻底调试过,所以我不知道为什么数据突然停止了。但是:

我不明白的是,这在从 XP 发送到 Vista 时效果很好,但反之则不行。我错过了什么?

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

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

【问题讨论】:

  • 我认为我遇到的问题是网络在发送我准备好的消息之前正在等待更多数据。我收到 REQUEST_MORE 消息的原因是发件人没有推送太多数据。我将尝试删除它,然后尝试计算接收者实际接受消息时的某种帧速率。我会回来的结果..
  • 测试成功了。它实际上在两台计算机上都处于阻塞状态,并且都在等待对方响应。所以我的问题可以考虑解决。我应该删除这个问题还是将某些内容标记为已接受的答案..?嗯..

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


【解决方案1】:

很难确定地说什么。但是,我强烈建议您为您的程序编写一个测试套件并实现一个测试用例来捕捉这个特定问题。这将使您更容易重现故障,并且尝试生成可以证明问题的最小测试用例通常非常有指导意义。此外,当您有(全自动)测试用例时,向其他人寻求帮助也更容易。

【讨论】:

    【解决方案2】:

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

    你有没有通过任何数据?

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

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

    XP 收到了吗?

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

    【讨论】:

      【解决方案3】:

      它实际上在两台计算机上都处于阻塞状态,并且都在等待对方响应。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-11-09
        • 2013-07-21
        • 1970-01-01
        • 1970-01-01
        • 2011-01-06
        • 1970-01-01
        • 1970-01-01
        • 2010-09-06
        相关资源
        最近更新 更多