![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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