Программирование сокетов Xp> Vista, Vista> XP - PullRequest
0 голосов
/ 09 февраля 2010

Я разрабатываю программу, которая отправляет изображения с одного компьютера на другой (аналогично удаленной помощи без ввода с клавиатуры или мыши). Два компьютера, которые я использую для тестирования, - это один компьютер с Windows XP и один Windows Vista. У меня есть стационарная машина XP, напрямую подключенная к маршрутизатору, и ноутбук, подключенный через беспроводную сеть.

Передача из XP в Vista работает отлично, я могу получать постоянный поток изображений, которые отображаются в Vista. Однако, когда я переворачиваю его и отправляю изображения из Vista в XP, это не работает. Я также попробовал локальное «копирование», то есть без сети получить поток изображений, и это работает как в Vista, так и в XP. Это одна и та же программа на обеих машинах.

Не думаю, что это имеет значение, но я использую GDI + для изображений. Поэтому я посылаю .jpg через поток в сети и перестраиваю его на другой стороне.

Мой класс сетевых сообщений называется NetMsg. он состоит из char* type и char* data. типы определяют, как я интерпретирую данные, здесь нет проблем.
Давайте назовем компьютеры № 1 и № 2.
Когда соединение установлено, и я пометил область на # 1, которую я хочу отправить:
001> # 1 отправляет тип RESIZE //, чтобы получить окно размером # 2 того же размера, что и область, которую я отметил на # 1
002> # 1 отправляет тип PICTURE_DATA // это фактические изображения
003> # 2 после получения двух вышеупомянутых сообщений отправляет тип REQUEST_MORE // # 2 хочет больше imagedata
004> # перейти к шагу 1

Я даже не удосужился отладить его при отправке данных изображений из XP в Vista, поскольку он отлично работает, именно так, как я этого хочу. Однако, когда Vista отправляет XP, я заметил следующее:

  • Полученных данных на самом деле может быть два NetMsgs. У меня есть поддержка для этого, разделив данные на несколько NetMsgs
  • Полученные данные могут быть неполными, то есть мне придется ждать больше данных. Я поддерживаю это, помечая NetMsg как неполное и на следующей передаче данных завершите его. (а также комбинация первого шага)

Это почти сработало, потому что некоторые изображения были переданы правильно, но затем они внезапно остановились. Я не отладил это полностью, поэтому я не знаю, почему данные внезапно остановились .. Однако:

Что я не понимаю, так это то, что это прекрасно работает при отправке с XP на Vista, но не наоборот. Чего мне не хватает?

Дайте мне знать, если вам нужны фрагменты кода, однако он довольно большой ... примерно 500 строк. В противном случае я ищу известные проблемы при отправке данных из Vista в XP.

Любая помощь и / или отзывы приветствуются!

Ответы [ 3 ]

0 голосов
/ 10 февраля 2010

Что вам действительно нужно, это описать проблему более подробно. Там может быть 100 причин, почему "это не работает".

Получаете ли вы какие-либо данные?

Попробуйте отправить всего несколько байтов, они проходят?

Если ничего не получается, попробуйте использовать Wireshark, отправляет ли Vista данные?

ХР получает его?

Никакой магии здесь, вам придется проверять путь данных от начала до конца.

0 голосов
/ 16 февраля 2010

На обоих компьютерах была блокировка, и оба ожидали ответа другого.

0 голосов
/ 09 февраля 2010

Трудно действительно сказать что-либо с какой-либо определенностью. Тем не менее, я настоятельно рекомендую вам написать тестовый набор для вашей программы и реализовать тестовый пример, который решает эту конкретную проблему. Это облегчит вам воспроизведение ошибки, и часто очень полезно поучаствовать в создании минимального контрольного примера, который может продемонстрировать проблему. Кроме того, когда у вас есть (полностью автоматический) тестовый пример, вам также легче попросить кого-то еще о помощи.

...