Главная страница
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.023 c
9-1159091711
Pa5ha
2006-09-24 13:55
2007.09.02
Согласовние анимации в игре


2-1186662007
Gamer
2007-08-09 16:20
2007.09.02
работа с Firebird из Delphi 2006


15-1186073298
Kerk
2007-08-02 20:48
2007.09.02
wget ?


2-1186512899
Цукор5
2007-08-07 22:54
2007.09.02
Кол-во символом в числе.


2-1186485158
Надежда
2007-08-07 15:12
2007.09.02
Проверка не запущена ли уже эта программа