Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TCP сервер и клиент, Проблема с асинхронным режимом 
:(
    Опции темы
alex30341
  Дата 27.1.2008, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 1.7.2007

Репутация: нет
Всего: нет



Вопрос к спецам. Я сейчас разрабатываю систему, на которой установлен ТСРсервер. Команда приходит от удаленного клиента и пересылается на контроллер, после чего контролер по RS-232 начинает слать информацию через сервер клиенту до получения от клиенты команды Стоп. Реализация  ТСРсервер и ТСРклиент были взяты с этого сайта (асинхронный режим). Контроллер шлет небольшие пакеты по 30-40 байт. Каждый такой пакет пересылается клиенту как отдельная посылка, client.SendData(packege) . Так вот если работать удаленно то пакеты могут приходить не в том порядке, в котором были отправлены. Замечу, что порядок очень важен, так как это ЭКГ, и соединение к серверу только одно. Кстати если клиент и сервер стоят на одной машине, то все работает без ошибок.  Вопрос как с этим бороться? 
PM MAIL   Вверх
onsql
Дата 27.1.2008, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 3.12.2007

Репутация: нет
Всего: 3



Если ты действительно используешь TCP, то там данные приходят именно в том порядке, в которым ты посылал -- за этим следит протокол. Но вот запросто может быть ситуация когда ты послал 80 байт одним send-ом а тебе пришли те же самые 80 байт но двумя кусками, например 40 и 40. Или наоборот ты посылал два пакета по 40 байт, а тебе пришел один блок 80 байт. Возможно у тебя происходит именно это?
PM MAIL   Вверх
alex30341
Дата 27.1.2008, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 1.7.2007

Репутация: нет
Всего: нет



Нет проблема не в этом. Пакеты (мои внутренние) маленькие по 30-30 байт и каждый отправляется отдельно и получается отделльно тоже. Т.е.  как я понял каждый мой пакет оборачивается в отдельный пакет ТСР и уходит клаенту. Однако там парядок получения отличается от порядка отправки. Кстати если бы они приходили по 2-3 пакета (моих) разом или разбивались на более мелкие ракеты я бы это увидел на клиенте.
PM MAIL   Вверх
alex30341
Дата 27.1.2008, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 1.7.2007

Репутация: нет
Всего: нет



Я все понял... Проблема в асинхронной записи в поток на стороне сервера

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

То есть при быстрой записи в поток большого числа маленьких пакетов возможен вариант одновременной записи в поток, отсюда и идет кутерьма с разнобоем в получении данных.
PM MAIL   Вверх
arilou
Дата 30.1.2008, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 3
Всего: 61



alex30341, нумеруй свои пакеты и обрабатывай в правильном порядке. 


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
cully
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, cully, mr.DUDA, Exception.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Распределённые приложения и сеть | Следующая тема »


 




[ Время генерации скрипта: 0.0673 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.