Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.05.2010, 09:14   #11
Vohakisa
Пользователь
 
Регистрация: 11.05.2009
Сообщений: 47
По умолчанию

Цитата:
Сообщение от Terran Посмотреть сообщение
В Делфи не встречал такой функции. Можете написать сами или допустим после каждой строки добавлять какой-нибудь символ и потом по нему и разделять назад данные.
+1. В своё время делал так. Если отсылал несколько строк допустим из БД несколько записей, то значение полей разделял символом "/", а строку символом ";" и отправлял клиенту как единую строку, а клиент уже у себя в цикле разбивал полученную строку.
Vohakisa вне форума Ответить с цитированием
Старый 19.03.2012, 13:36   #12
kotte33
Новичок
Джуниор
 
Регистрация: 14.03.2012
Сообщений: 1
По умолчанию

Цитата:
Сообщение от Terran Посмотреть сообщение
В Делфи не встречал такой функции. Можете написать сами или допустим после каждой строки добавлять какой-нибудь символ и потом по нему и разделять назад данные.
Я недавно встретил подобную функцию в делфи, гораздо упрощает работу в "пакетном" режиме и имя ей ExtractStrings:


Код на передачу (Packet - переменная типа string, слепляется из 4 переменных тоже типа string):
Код:
Packet:=code+#11+TextSit+#11+StrT+#11+StrD; //формирование пакета для передачи
for n:=0 to ServerSocket1.Socket.ActiveConnections-1 do ServerSocket1.Socket.Connections[n].SendText(ansistring(Packet));
Процедура на расшифровку:
Код:
procedure TMainForm.DecodePacket(Packet:string); //Расшифровка пакета
begin
PacketList.Clear; //Очистка списка
ExtractStrings([#11], [' '], PChar(Packet), PacketList);
Code:=PacketList[0];     //Код ситуации
TextSit:=PacketList[1];  //Текстовка сообщения
ST:=PacketList[2];       //Строка состояния таблицы
SD:=PacketList[3];       //Строка отметок диспетчеров
end;
В данном случае PacketList - глобальная переменная типа TStringList, созданная в начале работы программы и обязательно уничтоженная по выходы из нее (если уж совсем разжеванно):

Код:
...
var PacketList:TstringList;
...

procedure TMainForm.FormCreate(Sender: TObject);
begin
...
PacketList := TStringList.Create(); //Создать пакетный список
...
end;


procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
...
PacketList.Free(); //Очистить из памяти пакетный список 
...
end;

В данном случае я использовал системный символ с кодом #11 для разделения строк, но можно использовать любой другой и даже комбинацию этих символов (#10#13 например).
PS: за работу кода ручаюсь на 95% т.к. программа пока в бета-версии))

Особенность данного использования в том, что нужно контролировать "строки на вход", то бишь если отправлять 4 строки и третья будет пустой, то расшифровка в итоге даст 3 строки ВООБЩЕ, т.е. пустую строку он проскакивает. Следовательно перед отправкой надо проверять элементы пакета на размер, если на том конце <NULL> очень страшные последствия может принести ))

Последний раз редактировалось kotte33; 19.03.2012 в 14:00.
kotte33 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ClientSocket/Serversocket SendText Lime Работа с сетью в Delphi 10 08.10.2009 19:52
Socket Djem1991 Работа с сетью в Delphi 6 03.07.2009 23:45
socket Артэс C/C++ Сетевое программирование 2 22.06.2009 17:22
SoCket и списки Demol Работа с сетью в Delphi 2 22.03.2009 18:16
Socket Get Editor Работа с сетью в Delphi 7 22.04.2008 05:48