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

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

socket


Страницы:   1 2

CrazyTemo ©   (2002-05-22 17:53:00) 

как синхронизавать socket? то есть как контролиравать передачу дааных? например когда я посилаю текст, сервер получает все в месте, а я хочу получать каждую строку отделно


Donal_Graeme   (2002-05-24 09:18:00) [21]

2 cyborg: у тебя не предусмотрено, что сообщения могут быть разбиты. т.е. ты отправляешь "абвгд#13#10" а получатель сперва получает "аб" а потом "вгд#13#10".


Malder   (2002-05-23 21:28:00) [22]

Я тоже не понял претензии Digitman"а


cyborg   (2002-05-23 20:02:00) [23]

Digitman ©
А что за работа неожиданным образом?
Однако работает :-). У меня всё прекрасно делит. Хотя всё может быть. Расскажите поподробнее.

Fredericco ©
:-) На том и состоит код, что разделитель видно и по нему разбивается, т.е. не понял смысл ваших слов.

А вот сбои :-), это просто беда ...


Fredericco   (2002-05-23 16:51:00) [24]

cyborg © >> Если на том конце всегда добавлять #13#10 если нет физических сбоев или резкого зависания системы, то на другом конце ты всегда увидишь #13#10.


Digitman   (2002-05-23 11:01:00) [25]

>cyborg
Это не будет работать ожидаемым образом. Неверно представляешь себе логику метода ReceiveText().


cyborg   (2002-05-23 09:18:00) [26]

CrazyTemo Ничего не нужно контролировать, сокет сам уже всё контролирует, вот вставь себе в программу такой код:


Const Delitel : String = #13#10;
{Разделитель строк, добавляется в конец отсылаемых данных, можно написать любой, какой нравится}

---------
{Процедура обработки мессаг S-передаваемая строка,
Socket - Передаваемый сокет откуда пришла мессага}
Procedure Process_Message(Var S : AnsiString;Var Socket: TCustomWinSocket);
Begin
{Обрабатываем здесь полученные данные}
End;


procedure TMyForm.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
Var S,_S : AnsiString;
I : Integer;
begin
S:=Socket.ReceiveText;
I:=0;
Repeat {Разделяем строку, если одновременно пришло несколько}
I:=Pos(Delitel,S); {Ищем радлелитель Delitel}
if I<>0 then {Если найден делитель, тогда ... Если не найден, то ты не добавил в конце отсылаемой строки Delitel !}
Begin
_S:=Copy(S,1,I-1);{Копируем одну мессагу}
Delete(S,1,I+Length(Delitel)-1);
{Удаляем уже скопированную мессагу}
Process_Message(_S,Socket);
{Процедура обработки мессаг где _S наша выделенная мессага}
End;
Until I=0;
end;

{Пример отправки мессаг}
Socket.SendText("Ку ку!"+Delitel); {Важно добавлять в конце каждой отправляемой строки разделитель строк Delitel}

-----------------
Всё должно работать :-) ...


KPOT   (2002-05-22 18:46:00) [27]

Читай по одному символу до контрольного знака


Страницы:   1 2

Наверх

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