Push flag для TCustomWinSocket
ClientSocket->Socket->SendText( "2" );
Передаст не два, а одно сообщение на другую сторону соединения. Сервер получит "12".
Подскажите, как избежать этой проблемы и заставить сообщение отправляться принудительно?
Отправляйте на сервере уведомление клиенту о том что данные получены, а на клиенте - ожидайте подтверждения, а только потом отправляйте следующую. Либо введите разделитель какой нибудь. Либо по человечески сформулируйте свою задачу.
Сейчас все сообщения собираются в TCP-пакеты, которые отправляются на удаленный компьютер. При этом для оптимизации работы с сетью каждый новый байт, который требуется отправить, добавляется в буфер отправки. Когда в буфере набирается достаточно информации или какое-то время в него ничего не поступает, из буфера формируется пакет и уходит в сеть.
Концепция TCP предполагает управляющие флаги, которые влияют на отсылку и получение. И среди этих флагов есть PUSH, который говорит, что прямо сейчас надо взять все данные из буфера, сформировать из них пакет и немедленно отослать его. Это теория.
В применении к моему случаю все это означает, что сообщения "1" и "2" оказываются в одном буфере и уходят в одном пакете. Вот я и спрашиваю, как можно приказать выставить этот самый PUSH флаг? Тогда я смогу отправить первое сообщение, вытолкнуть его из буфера в пакет и передать в сеть и только затем класть второе сообщение в буфер.
Спасибо, но реализовывать такой велосипед - это неприемлемо. Есть стандартный механизм, и я уверен, Builder дает возможность им пользоваться в своих классах... Только вот как? :confused:
Я надеялся, что после слов "push flag" ничего больше пояснять не придется.
В общем то поэтому, я никогда и не использовал данные компоненты в работе. Если вам это надо - то вероятно ожидание ответа от сервера - это то, что вам нужно. Либо введение разделителей. В данном случае это не "велосипед" - так как вы реализуете именно логику приложения.
Я надеялся, что после слов "push flag" ничего больше пояснять не придется.
приведенный вами код - более чем полностью является [COLOR="Gray"]быдлокодом[/COLOR] индийским. Потому ваши надежды безосновательны.
Как раз таки - использование флагов при этом является чистой воды развитием этого подхода.
Подскажите, как избежать этой проблемы и заставить сообщение отправляться принудительно?
К примеру отправлять по таймеру ... или копить в буфере приложения до достижения определённой длины или по прошествии таймаута и отправить ...