Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.09.02;
Скачать: CL | DM;

Вниз

Сокеты и слияние команд   Найти похожие ветки 

 
Снова я   (2007-08-11 14:34) [0]

Как избежать слияния отправляемого и принимаемого текста через TSocketServer(Client).SendText(RecieveText) в асинхронном режиме? Пока реализовал отправку с сервера с задержкой (50 мс), но даже так, особенно через интернет (тем более если у пользователя модем :)) на стороне клиента иногда команды сливаются в одну строку. Как собсно этого избежать и при этом использовать неблокирующее соединение (использование некого символа как терминатора команды не канает ибо после него может придти незавершенный кусок следующей команды). Желательно алгоритм.


 
Двигатель внешнего сгорания   (2007-08-11 14:40) [1]


> Снова я   (11.08.07 14:34) 


Это кто?

Иди и ищи в конференции "Сети" и в "Начинающих".
Полно таких вопросов.
За тебя искать?


 
Снова я   (2007-08-11 15:47) [2]

Поискал но тщетно... Могли бы и ссылочку дать :)


 
Снова я   (2007-08-11 16:56) [3]

От вас недождесси :) Придется пользоваться вариантом с терминатором строки :) Он конечно не является элегантным и оптимизированным но вполне справляется с задачей приема команд от сервера и их выполнения когда когда за раз может прилететь или кусок предыдущей команды или несколько команд в строке.

Каждая команда заканчивается символом "<". Обьявлена глобальная переменная currentCmd.

procedure TForm1.ClientSocket1Read(Sender: TObject;
 Socket: TCustomWinSocket);
var
 s: String;
 i: Word;
 recieving: Boolean;
begin
 s := Socket.ReceiveText;
 recieving := false;
 for i:=1 to length(s) do begin
   recieving := true;
   if s[i] = "<" then begin // конец команды
     recieving := false;
     Execute(currentCmd);
     currentCmd := "";
   end
   if recieving then currentCmd := currentCmd+s[i];
 end;
end;


В связи с этим еще вопрос. Какой код символа который невозможно явно (или через Alt) напечатать скажем в TEdit а только сгенерировать в программе? Для символа, завершающего команду.


 
Anatoly Podgoretsky ©   (2007-08-11 17:26) [4]

> Снова я  (11.08.2007 16:56:03)  [3]

Невозможно с помощью клавиатуры сгенерировать только код символа #0
Все остальные 255 (для ANSI) возможно


 
Двигатель внешнего сгорания   (2007-08-12 00:02) [5]


> Снова я   (11.08.07 16:56) [3]
> От вас недождесси :) Придется пользоваться вариантом с терминатором
> строки :) Он конечно не является элегантным и оптимизированным
> но вполне справляется с задачей приема команд от сервера
> и их выполнения когда когда за раз может прилететь или кусок
> предыдущей команды или несколько команд в строке.Каждая
> команда заканчивается символом "<". Обьявлена глобальная
> переменная currentCmd.


Для передачи текста стандартное решение использовать терминатором символы 0d0a, либо только 0a.


 
Anatoly Podgoretsky ©   (2007-08-12 00:07) [6]

> Двигатель внешнего сгорания  (12.08.2007 00:02:05)  [5]

Почему "только 0a", чем только 0d не устраивает или другое любое значение. В таблице ASCII нет символа конец строки.


 
Двигатель внешнего сгорания   (2007-08-12 00:20) [7]


> > Двигатель внешнего сгорания  (12.08.2007 00:02:05)  [5]Почему
> "только 0a", чем только 0d не устраивает или другое любое
> значение. В таблице ASCII нет символа конец строки.


Как стандарты окончания строки в Windows- и Unix-системах ...



Страницы: 1 вся ветка

Текущий архив: 2007.09.02;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.016 c
1-1182408497
Kolan
2007-06-21 10:48
2007.09.02
Не омгу подключить пакет, ругется что already on the search path


15-1186039377
VirEx
2007-08-02 11:22
2007.09.02
С днем рождения 29 июля!


15-1186512073
Loginov Dmitry
2007-08-07 22:41
2007.09.02
Баг в Delphi (от 7 до 2007) с условной компиляцией


15-1186074214
TStas
2007-08-02 21:03
2007.09.02
По каким книжкам люди инстоляторы писать учатся?


11-1168845875
AlexY
2007-01-15 10:24
2007.09.02
Замена системных модулей в D5