Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Record и String: Жить им вместе? [D7, XP]


Страницы:   1 2 3

kirik ©   (2006-09-13 10:26:00) 

Как можно данные из TRecord запихнуть потоком в String? То есть например при получении через сокет  пакета данных проверять если есть определённая датаграмма - то в Trecord, иначе - в String?


kirik   (2006-09-13 11:09:00) [41]

Фрагмент файла:
\xEЭлпроммаш, ООО                                                                                      \x6443090  \x6Самара                                                                                                                                                           \x3846   \x82763000,\xBБлинов Е.В.                                                                                          \xF2734999,2734900                                                                                               \x2 \x1  \x3 \x50.edf090.edf        \x19Промышленное оборудование                                                       \x11Самарская область                                                                 Салаватский железобетонный завод, ОАО                                                               \x11www.elprommash.ru                                                               \x12mail@elprommash.ru                                                              

Причина:
Не устраивает скорость передачи данных из этого файла - для удалённых пользователей слишком долго

Попытки действия
1. Кеширование в архив на локал. Отвергнуто, т.к. изменения не фиксировались вовремя.

2. В данный момент попытка транзакций через сокеты, дабы передавать данные пакетами по SizeOF(TOrganization)[955 байт], а не весь файл каждый раз. При попытке быстро передать несколько записей-Async error.

Вот...


Сергей М.   (2006-09-13 11:06:00) [42]

Ерунда какая-то .. код - фтопку ..

Ты скажи по-русски, тебе что нужно сделать-то - передать файл от клиента серверу или что ?

ПРиведи фрагмент реального содержимого файла dblist.dat ..


kirik   (2006-09-13 11:05:00) [43]

а при выводе сделать StrPas? если можно, код? Не соображаю - ночью не спал.


Elen   (2006-09-13 11:04:00) [44]


> kirik

А ты не забыл что в String первые 2 байта - длина строки?
Это я по поводу Move(oa, PChar(mr)^, SizeOf(oa));
Ты уж лучше обьяви mr:pcharи не забывай добавлять при переносе #0


kirik   (2006-09-13 10:58:00) [45]

procedure TForm1.Button5Click(Sender: TObject);
var St: TFileStream; ms: TOrganization;  I: Integer;
begin
 if (ClientSocket1.Active=False) then Exit;
 try
 St := TFileStream.Create('\\192.168.0.1\shared\áàçà\db2\dblist.dat ', fmOpenRead or fmShareDenyNone);
 with ClientSocket1 do begin
    for I := 1 to 1 do begin
      Randomize;
      st.Seek(sizeof(ms)*Random(555), 0);
      st.Read(ms, sizeof(ms));
      socket.SendBuf(ms, sizeof(ms));
    end;
 end;
 St.Destroy;
 except
 end;
end;

   procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
     Socket: TCustomWinSocket);
   var mr: string; rl: integer; oa: torganization;
   begin
     {Îò êëèåíòà ïîëó÷åíî ñîîáùåíèå - âûâîäèì åãî â Memo1}
     rl := socket.ReceiveLength;

     socket.ReceiveBuf(oa, socket.ReceiveLength);
     if (rl=sizeof(oa)) then begin
       Memo1.Lines.Insert(0, 'Datagram received: '+trim(oa.Name));
     end else begin
       SetLength(mr, SizeOf(oa)+2);
       Move(oa, PChar(mr)^, SizeOf(oa));
       mr := trim(mr) + #13#10;
       Memo1.Lines.Insert(0,'> '+mr);
     end;
     if (mr=#13#10) then Socket.Close;
   end;


Dmitrij_K   (2006-09-13 10:50:00) [46]

ты код показывай а не результат. Телепаты в отпуске


kirik   (2006-09-13 10:46:00) [47]

> tetetetetet~€УwЁЮ\x15> test> test> test> Edit2
во чё даёт гад:(


kirik   (2006-09-13 10:40:00) [48]

> ests> mys.htm
Datagram received: Сорский ГОК,ОАО
Datagram received: Сорский ГОК,ОАО

вот что получаем после "запихивания". первая строчка это два отдельных сообщения !текстовых! отправленных не как файл, а как простой текст. он не переносит строки..


Сергей М.   (2006-09-13 10:38:00) [49]

простое "запихивание")


kirik   (2006-09-13 10:35:00) [50]

простое перемещение в памяти?


Dmitrij_K   (2006-09-13 10:29:00) [51]

Имеем буфер
buf : Array[0..255] of Byte;

if String then
begin
 SetLength(str,РАЗМЕР);
 CopyMemory(@str[1],@buf[0],РАЗМЕР);
end
          else
begin
 CopyMemory(@Record,@buf[0],SizeOf(Record));
end;


Сергей М.   (2006-09-13 10:29:00) [52]

var
 Record: TRecord;
 Str: String;
..
 SetLength(Str, SizeOf(Record));
 Move(Record, PChar(Str)^, SizeOf(Record));


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо