![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Record и String: Жить им вместе? [D7, XP]
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));