Делаю рассылку клиентам. Почему-то, если я отправляю массово BeginSend (в цикле), то на клиент приходит мусор. Если делаю синхронный Send, то все нормально. Данные где-то мешаются? Разве TCP не гарантирует последовательность? Я понимаю, что тут не просто TCP, но еще и асинхронные порты, но они они вроде как должны гарантировать порядок? Или я ошибаюсь.
Поток отправки данных один. Берет, что рассылать, из очереди.
Здравствуйте, Аноним, Вы писали:
А>если я отправляю массово BeginSend (в цикле), то на клиент приходит мусор
Синхронизировать BeginSend в callback'е нужно. Была похожая проблема, правда с SerialPort.Write и с потоками, решается элементарно с помощью lock.
---
ПроГLамеры объединяйтесь..
Re[2]: Socket.BeginSend - нужно ли ждать окончания?
От:
Аноним
Дата:
11.06.13 07:59
Оценка:
Здравствуйте, Sinatr, Вы писали:
S>Синхронизировать BeginSend в callback'е нужно. Была похожая проблема, правда с SerialPort.Write и с потоками, решается элементарно с помощью lock.
Не совсем понять, локировать какую именно область?
Здравствуйте, Аноним, Вы писали:
А>Делаю рассылку клиентам. Почему-то, если я отправляю массово BeginSend (в цикле), то на клиент приходит мусор. Если делаю синхронный Send, то все нормально. Данные где-то мешаются? Разве TCP не гарантирует последовательность? Я понимаю, что тут не просто TCP, но еще и асинхронные порты, но они они вроде как должны гарантировать порядок? Или я ошибаюсь.
Буфер в BeginSend передается каждый раз свой? Код в студию.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[2]: Socket.BeginSend - нужно ли ждать окончания?
От:
Аноним
Дата:
11.06.13 13:16
Оценка:
Здравствуйте, hardcase, Вы писали:
H>Буфер в BeginSend передается каждый раз свой? Код в студию.
Я немного с ламбдами поигрался, может что там напортачил:
Здравствуйте, Аноним, Вы писали:
А> clientStream.BeginWrite(buffer, 0, buffer.Length, ar => А> clientStream.EndWrite(ar);
Кста, что за ar вы передаёте в EndWrite? Разве туда не суётся IAsyncResult, возвращаемый BeginWrite?
Re[4]: Socket.BeginSend - нужно ли ждать окончания?
От:
Аноним
Дата:
13.06.13 14:37
Оценка:
Здравствуйте, matumba, Вы писали:
M>Здравствуйте, Аноним, Вы писали:
А>> clientStream.BeginWrite(buffer, 0, buffer.Length, ar => А>> clientStream.EndWrite(ar);
M>Кста, что за ar вы передаёте в EndWrite? Разве туда не суётся IAsyncResult, возвращаемый BeginWrite?