2011-02-10 3 views
0

Hi Мы пишем уникальный проект. Мне было интересно, может ли кто-нибудь указать мне нас в правильном направлении, поскольку я не знаком с программированием tcp.C# отправьте и получите пакет tcp через веб-приложение

Мы говорим с внешней системой. Я отправляю пакет tcp и получаю ответ tcp. Это необходимо для работы со страницы в веб-приложении, непрерывного опроса каждые x мс

Предлагаемая длина сообщения составляет 8 байт, информация о начале или конце сообщения не передается. Структура сообщения: | байт 0 | байт 1 | байт 2 | байт 3 | байт 4 | байт 5 | байт 6 | байт 7 |

Обозначения сообщений: | байт 0 | = 0x02 (stx) и | байт 7 | = 0x03 (etx)

My send message: | stx | 'S' | 'B' | '0' | '0' | '0' | '0' | etx |

My recv message: | stx | 'S' | 'B' | '0' | '1' | '0' | '0' | etx |

Вопросы:

Должен ли я использовать классы TcpClient/Listener или Sockets классы?

Каким образом можно получить веб-страницу для непрерывного опроса и отправки/получения этих пакетов каждые x мс?

+3

Лучшим способом было бы не использовать веб-страницу для непрерывной связи, использовать сервис. –

+0

ОК, спасибо, я думал об этом, но мне нужно отобразить результаты ответа tcp во флэш-сообщение для пользователя. –

+0

ваша веб-страница делает вызов AJAX на ваш сервер.Это может сделать вызов обработчику, службе, независимо от того, что не имеет значения. Ваш обработчик затем вызывает вызов внешней системы с использованием TCP. Это тот код, который у вас есть в настоящее время. Ответ от внешней системы отправляется обратно как ответ вашего обработчика на веб-страницу. Веб-страница делает то, что нужно делать с этими данными. –

ответ

0

То, что вы предлагаете, в принципе не может быть сделано, поскольку Javascript не поддерживает прямой TCP/IP. Вам нужно будет запустить TCP-процесс на сервере и использовать метод асинхронного обновления для отображения результатов на вашей веб-странице.

Чтобы отобразить результаты асинхронно на вашей странице, вам необходимо использовать Ajax и Comet. Комета предлагает вам в основном три варианта:

  1. Проведите свой Javascript-опрос на сервере с помощью запроса Ajax, вызванного обратным вызовом таймера; у этого есть все недостатки опроса,
  2. Используйте «длинный опрос», который по существу означает асинхронный вызов вашего веб-сайта, который блокируется до тех пор, пока он не получит результат; это не очень хорошо масштабируется, поскольку он блокирует поток IIS для каждой клиентской веб-страницы,
  3. Использование кометного сервера и связанной с ним библиотеки на стороне клиента - лучший маршрут, но обычно это тратит деньги.

Существует много информации о кометах и ​​Ajax в Интернете.

0

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

Другим вариантом является использование файла .swf в качестве посредника для вашего сообщения TCP. См. http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/Socket.html. Каждый раз, когда вы получаете интересующий пакет, вы можете использовать ExternalInterface, чтобы передавать данные из флеш-ролика и с нетерпением ждать javascript!

+0

Flash, как и JavaScript, не допускает междоменной связи, если на другом веб-сайте нет файла политики междоменной политики. Это больше работы, которые должны быть (добавление Flash в микс). –

+0

Спасибо, ничего себе, я никогда не думал, что вспышка встроена в него. Теперь я просматриваю веб-узлы, я думаю, что это то, что мне нужно. –