Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.09.02;
Скачать: [xml.tar.bz2];

Вниз

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

 
Снова я   (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.051 c
2-1186581369
Constantin
2007-08-08 17:56
2007.09.02
Double


15-1185963941
Kolan
2007-08-01 14:25
2007.09.02
Где узнать как работает кещирующий прокси?


15-1186396410
pirks
2007-08-06 14:33
2007.09.02
Железо


2-1186737234
Новичек
2007-08-10 13:13
2007.09.02
Массив объектов.


2-1186323790
JetAPI
2007-08-05 18:23
2007.09.02
TButton: Как одно событие, согласовать с другим событием?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский