![]() |
Модераторы: gambit |
![]() ![]() ![]() |
|
alex30341 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 1.7.2007 Репутация: нет Всего: нет |
Вопрос к спецам. Я сейчас разрабатываю систему, на которой установлен ТСРсервер. Команда приходит от удаленного клиента и пересылается на контроллер, после чего контролер по RS-232 начинает слать информацию через сервер клиенту до получения от клиенты команды Стоп. Реализация ТСРсервер и ТСРклиент были взяты с этого сайта (асинхронный режим). Контроллер шлет небольшие пакеты по 30-40 байт. Каждый такой пакет пересылается клиенту как отдельная посылка, client.SendData(packege) . Так вот если работать удаленно то пакеты могут приходить не в том порядке, в котором были отправлены. Замечу, что порядок очень важен, так как это ЭКГ, и соединение к серверу только одно. Кстати если клиент и сервер стоят на одной машине, то все работает без ошибок. Вопрос как с этим бороться?
|
|||
|
||||
onsql |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 94 Регистрация: 3.12.2007 Репутация: нет Всего: 3 |
Если ты действительно используешь TCP, то там данные приходят именно в том порядке, в которым ты посылал -- за этим следит протокол. Но вот запросто может быть ситуация когда ты послал 80 байт одним send-ом а тебе пришли те же самые 80 байт но двумя кусками, например 40 и 40. Или наоборот ты посылал два пакета по 40 байт, а тебе пришел один блок 80 байт. Возможно у тебя происходит именно это?
|
|||
|
||||
alex30341 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 1.7.2007 Репутация: нет Всего: нет |
Нет проблема не в этом. Пакеты (мои внутренние) маленькие по 30-30 байт и каждый отправляется отдельно и получается отделльно тоже. Т.е. как я понял каждый мой пакет оборачивается в отдельный пакет ТСР и уходит клаенту. Однако там парядок получения отличается от порядка отправки. Кстати если бы они приходили по 2-3 пакета (моих) разом или разбивались на более мелкие ракеты я бы это увидел на клиенте.
|
|||
|
||||
alex30341 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 1.7.2007 Репутация: нет Всего: нет |
Я все понял... Проблема в асинхронной записи в поток на стороне сервера
См. здесь: MSDN Текущее положение в потоке обновляется при асинхронном чтении или записи, а не по завершении операции ввода-вывода. Несколько одновременных асинхронных запросов приводят к заполнению запросов в неопределенном порядке. То есть при быстрой записи в поток большого числа маленьких пакетов возможен вариант одновременной записи в поток, отсюда и идет кутерьма с разнобоем в получении данных. |
|||
|
||||
arilou |
|
|||
![]() Великий МунаБудвин ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2646 Регистрация: 15.7.2004 Где: город-герой Минск Репутация: 3 Всего: 61 |
alex30341, нумеруй свои пакеты и обрабатывай в правильном порядке.
|
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, cully, mr.DUDA, Exception. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Распределённые приложения и сеть | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |