Розетки Asyn Connection - PullRequest
       8

Розетки Asyn Connection

0 голосов
/ 02 ноября 2009

Я новичок в Async Socket Connection. Можете ли вы объяснить, пожалуйста. Как работает эта технология? Существует существующее приложение (сервер), которому требуются сокетные соединения для передачи данных назад и вперед. Я уже создал свое приложение (.NET), но приложение Server, похоже, не понимает данные XML, которые я отправляю. Моя документация дает мне два порта: один для отправки и другой для получения. Я должен быть уверен, что понимаю, как это работает. Я получил IP-адреса, а также два порта для использования.

Ответы [ 2 ]

1 голос
/ 02 ноября 2009

давайте разберемся с неправильным представлением ... сокеты ПОЛНОСТЬЮ-ДУПЛЕКС: вы подключаетесь к серверу, используя один порт, затем вы можете отправлять и получать данные через один и тот же сокет, нет необходимости в двух номерах портов. (фактически, порт для назначения данных назначен, но он: 1. назначается автоматически при создании сокета (если не указано иное) и 2. не используется в вызовах функций для получения данных)

поэтому вы говорите нам, что в вашей документации есть 2 номера портов ... я предполагаю, что "сервер" - это уже существующее внутреннее приложение, и вы пытаетесь с ним поговорить. если в документе указаны 2 порта, то вам понадобятся 2 сокета: один для отправки и другой для получения. Теперь я рекомендую вам сначала использовать синхронный сокет, прежде чем пытаться использовать асинхронный способ: синхронный сокет менее подвержен ошибкам для первого теста.

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

1 голос
/ 02 ноября 2009

Сокет является наиболее «сырым» способом, который вы можете использовать для отправки пакетов байтов TCP и UDP по сети.

Например, ваш браузер использует сокет TCP-соединение для подключения к веб-серверу StackOverflow через порт 80. Ваш браузер и сервер обмениваются командами и данными в соответствии с согласованной структурой / протоколом (в данном случае HTTP). Асинхронный сокет ничем не отличается от синхронного сокета, за исключением того, что он не блокирует поток, который его использует.

Это действительно не самый идеальный способ работы (проверьте и посмотрите, поддерживает ли ваше приложение сервера / поставщика SOAP / Web-сервисы и т. Д.), Но если это действительно единственный способ, может быть несколько причин, почему терпит неудачу. Чтобы назвать несколько ...

  1. На самом деле не подключен или не отправляет данные. Запустите тест с использованием WinsockTool (http://www.isatools.org/tools/winsocktool.msi)) и сначала смоделируйте клиент, чтобы убедиться, что сервер работает должным образом.
  2. Неправильная кодировка - вы отправляете необработанные байты по сети ... Убедитесь, что вы используете правильную кодировку для преобразования вашего XML в байты (ASCII, UTF8 и т. Д.).
  3. Длина буфера - Ваш буфер отправки (объем данных, который вы можете передать за один кадр) может быть слишком маленьким, или сервер может ожидать содержимое определенной длины, и ваш XML может быть усечен.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...