Главная страница
    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
Время: 2.894 c
4-1173645922
Анонимщик1
2007-03-11 23:45
2007.09.02
WaitForMultipleObject, Event, ReadDirectoryChangesW, AV


2-1186384703
DmitryFox
2007-08-06 11:18
2007.09.02
Локализация приложения для Китая


9-1159184845
!Trinix
2006-09-25 15:47
2007.09.02
Snap Cubemap


2-1186858301
инженер
2007-08-11 22:51
2007.09.02
Microsoft Word


11-1168775119
Psychedelic
2007-01-14 14:45
2007.09.02
Как отличать друг от друга компоненты





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский