stikriz11 писал(а):Правильно.
Хоть чье то мнение, спасибо!
Посмотрел книги по теме, но вот про Sleep везде умалчивают авторы. Что в книгах про сокеты Линукса, что в книгах по Delphi.
..есть такой алгоритм
Цикл
Пишем в сокет (n раз)
Читаем сокет (n раз)
Sleep(Х)
Конец цикла
На обоих сторонах. Если я делаю Sleep(100), то у меня все вроде бы работает, только пинг 125. Работает - я имею ввиду SendMessage, SendStream. Если я ставлю Sleep(10), то все работает на локальном ПК в пределах роутера(по ip выданным роутером, не через 127...). Как только я начинаю коннектится через свой внешний IP к себе же, то SendStream перестают обрабатываться корректно. Клиент перестает присылать DONE о получении.
1. Непонятно, нужно ли делать Sleep() чтобы процессорное время переключилось на работу сокета при отправке. Учитывая проблему с Stream отправками
2. Sleep в конце нужен чтобы основной поток программы обработал работу интерфейса и процедуры чтения данных обработали полученные данные. Но как оценить сколько им надо разумного времени. И так потоковое разделение есть, откуда палки в колесах из-за разницы времени Sleep не соображу пока что.
3. SendMessage работает всегда четко, SendStream запинается в зависимости от таймингов... и тут не понятна следующая логика. Мы делаем отправку, а получатель в цикле делает Sleep(10..100) и потом с таймаутом делает чтение сокета. Т.е. в один из циклов чтения так или иначе мы должны получить что было отправлено в сокет. Но по факту получается что иногда спотыкается все, если я пытаюсь делать цикл быстрее.
Пока пришел к тому, что "стабильная" схема Ping*4=1200ms. Т.е. отправка с эхо ответом занимает 125..250мс, а фактическая передача каждого сообщения делаться с ожиданием встречного подтверждения DONE, итого 1200ms примерно. Это на локальном ПК.

Пробовал ставить по разному NoBlock ноль эмоций.