C # отправка и получение пакетов TCP через веб-приложение

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

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

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

Разделители сообщений: | байт 0 | = 0x02 (stx) и | байт 7 | = 0x03 (etx)

Мое сообщение: | stx | ‘S’ | ‘B’ | ‘0’ | ‘0’ | ‘0’ | ‘0’ | etx |

Мое повторное сообщение: | stx | «S» | ‘B’ | ‘0’ | '1' | ‘0’ | ‘0’ | etx |

Вопросы:

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

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


person Dr.    schedule 10.02.2011    source источник
comment
Лучшим способом будет не использовать веб-страницу для постоянного общения, а воспользоваться услугами.   -  person Jaroslav Jandek    schedule 11.02.2011
comment
хорошо, спасибо, я думал об этом, но мне нужно отобразить результаты ответа tcp во флэш-сообщении для пользователя.   -  person Dr.    schedule 11.02.2011
comment
ваша веб-страница выполняет вызов AJAX на ваш сервер. Он может вызвать обработчик, службу, что угодно, не имеет значения. Затем ваш обработчик вызывает внешнюю систему с помощью TCP. Это любой код, который у вас есть в настоящее время, который делает это. Ответ от внешней системы отправляется обратно как ответ вашего обработчика на веб-страницу. Веб-страница делает с этими данными то, что ей нужно.   -  person Shiv Kumar    schedule 11.02.2011


Ответы (2)


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

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

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

В сети много информации о Comet и Ajax.

person Mike Jones    schedule 10.02.2011

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

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

person Nathan Anderson    schedule 10.02.2011
comment
Flash, как и JavaScript, не допускает междоменного взаимодействия, если другой веб-сайт не имеет файла междоменной политики. Это больше работы, чем нужно (добавление Flash в микс). - person Shiv Kumar; 11.02.2011
comment
Спасибо, вау, я даже не подозревал, что во Flash это встроено. Я сейчас изучаю веб-сокеты, думаю, это то, что мне нужно. - person Dr.; 12.02.2011