Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

ServerSocket и ClientSocket [D5]


zokzok ©   (2004-11-08 17:15:00) 

отправляю несколько сообщений примерно так (несколько раз вызываю процедуру):

if IsServer then
     ServerSocket.Socket.Connections[0].SendText('text')
   else
     ClientSocket.Socket.SendText('text');


а они принимаются как одно сообщение одной строкой.
Как разделить принимаемые сообщения?


Digitman   (2004-11-11 09:12:00) [1]


> я имею в виду процедуру из первого поста


я не вижу в 1-м посте никаких процедур.


> в обработчике содержится процедура, отправляющая сообщения


поэтому и говорю - свистни, как напишешь обработчик.
пока же никаких конкретных обработчиков не видно в твоих постах, есть только шматок неприкаянного кода.


zokzok   (2004-11-10 20:13:00) [2]


> Digitman ©   (10.11.04 12:13) [6]

ладно, не злись...

> пиши. как напишешь - свистни.

это я имею в виду процедуру из первого поста

> что значит "через" ?

т е в обработчике содержится процедура, отправляющая сообщения

> какое отношение это событие, возбуждаемое уже по факту приема
> принимающей стороной неких данных, имеет к "отправляю" ?

вот это мне и самому не понятно


Digitman   (2004-11-10 12:13:00) [3]


> zokzok   (09.11.04 19:56) [4]


> вобщем


и ответ будет "вобщем".
нужны конкретности ? изволь не "вобщем", а конкретно.


> пишу


пиши. как напишешь - свистни.


> одинаковый обработчик для TForm1.ClientSocket1Read и TForm1.ServerSocket1ClientRead


глубоко сомневаюсь, что серверная и клиентская стороны могут и должны одинаково обрабатывать порции поступающей поточной инф-ции.


> и через него отправляю


что значит "через" ? и какое отношение это событие, возбуждаемое уже по факту приемапринимающей стороной неких данных, имеет к "отправляю" ?


Григорьев Антон   (2004-11-10 11:56:00) [4]

Повторяю ещё раз: отправитель и получатель не должны делать никаких предположений о том, как данные будут разбиваться или склеиваться. То, что не склеивается в одной сети, может склеиться в другой. Результат также может зависеть от загруженности сети в данный момент. Нужно, чтобы сообщения гарантировано не склиевались - используйте UDP. Но тогда придётся отказаться от TServerSocket и TClientSocket, т.к. они не поддерживают UDP, и использовать TUDPSocket или писать прямо на API.


zokzok   (2004-11-09 19:56:00) [5]

вобщем так: пишу одинаковый обработчик для TForm1.ClientSocket1Read и TForm1.ServerSocket1ClientRead, и через него отправляю сообщения - принимаются нормально, т е раздельно. Отправляю сообщения из другого места программы - идут непрерывно. Это как-нить проясняет ситуацию?
Может всё-таки можно 'разделить' отправку сообщений?


Григорьев Антон   (2004-11-09 13:09:00) [6]


> zokzok   (08.11.04 18:27) [2]
> бестолку SendText('text'+#13);
> там где #13, отображается символ переноса строки (верт.
> черта)

Так вручную их разделить, обнаружив этот символ. TCP - потоковый протокол, он может склеивать несколько пакетов в один, а также разбивать один на несколько. Отправитель и получатель не должны делать никаких предположений о том, как данные будут разбиваться или склеиваться, и должны воспринимать эти данные как единый непрерывный поток, поступающий такими порциями, какими сочтёт нужным система.


zokzok   (2004-11-08 18:27:00) [7]

бестолку SendText('text'+#13);
там где #13, отображается символ переноса строки (верт. черта)


Rem   (2004-11-08 17:53:00) [8]

Посылать разделитель. Например, #13


Наверх

Титульная страница Поиск, карта сайта Написать письмо