Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.03.11;
Скачать: CL | DM;

Вниз

Передача EXE-файла с помощью TServerSocket и TClientSocket   Найти похожие ветки 

 
Wiktor   (2007-02-15 07:28) [0]

Здравствуйте, у меня проблемка: возможно ли передать EXE-файл по сети через TServerSocket и TClientSocket без потери данных.
(если да, то какие процедуры нужно использовать)

Заранее благодарю.


 
Separator ©   (2007-02-15 07:50) [1]

А чем отличается .exe файл от .txt?


 
Сергей М. ©   (2007-02-15 08:12) [2]


> какие процедуры нужно использовать


SerdStream, SendBuf, ReceiveBuf


 
Wiktor   (2007-02-15 18:19) [3]

>>А чем отличается .exe файл от .txt?

EXE-файл отличается от txt тем что:
1) это исполняюший файл.
2) это программа и её содержимое - это машинный код.
Я пробовал на Delphi писать 16-ричный редактор и передавать файл в текстовом коде, но TClientSocket не смог его правильно скомпилировать в EXE.
Поэтому я обратился за помощью.


 
Джо ©   (2007-02-15 21:45) [4]

> [3] Wiktor   (15.02.07 18:19)
> EXE-файл отличается от txt тем что:

Все перечисленное тобой совершенно несущественно. SerdStream, SendBuf и ReceiveBuf оперируют набором байтов, а байты текстового и исполнимого файла ни цветом, ни запахом не различаются :)


 
Германн ©   (2007-02-16 01:56) [5]

Имхо, мой телепатор сигнализирует мне, что автор хочет не просто передать exe-шник, а и выполнить его на удалённом компе! Очередной кулхацкер:)


 
Elen ©   (2007-02-16 08:00) [6]


> Германн ©   (16.02.07 01:56) [5]

Не просто выполнить а еще перед этим цитирую :"правильно скомпилировать в EXE" через сокет. :), что мне не очень ясно...


 
Сергей М. ©   (2007-02-16 09:22) [7]


> Wiktor   (15.02.07 18:19) [3]


> TClientSocket не смог его правильно скомпилировать в EXE.


TClientSocket вообще ничего не "компилирует", у него совершенно иные задачи.
Где ты такой травы накурился - ума не приложу)


 
medved_68 ©   (2007-02-16 09:50) [8]


> Я пробовал на Delphi писать 16-ричный редактор и передавать
> файл в текстовом коде, но TClientSocket не смог его правильно
> скомпилировать в EXE.

ОГО, ничего себе....Wiktor поделитесь, пожалуйста, секретом. Ну очень мне хочется иметь такой толковый TClientSocket.


 
Wiktor   (2007-02-16 14:48) [9]

Начнём с начала:

<Джо>
Вот например "SerdStream" - считывает только текст (у меня почему-то три первые буквы из EXE-файла "MZP", а далее просто не читает.

<Германн>
Не знаю, что там или кто там, сигнальзирует тебе, но я лично не собираюсь никому ничего отправлять, пользователи сами берут и качают и задают вопросы - "А чё проги-то нельзя скачивать,- только картинки...", да и я вовсе не какой нибуь.., как ты там сказал.., "Очередной кулхацкер". Если б мне нужен бал вирус, я бы не обратился к этому сайту.
P.S. Без обид. Ок.

<Elen>
Цитирую:
"Не просто выполнить а еще перед этим цитирую :"правильно скомпилировать в EXE" через сокет. :), что мне не очень ясно..."
Правильно скомпилировать в EXE через сокет, я имел в виду когда сокет принимает данные(когда я пробовал прередавать в текстовом формате), он записал их в виде:
4D5A90000300000004000000FFFF0000B80000000000000040000000000000000000000000000000 0000000000000000000000000000000000000000800000000E1FB
... и так далее и это была всего лишь текстовая информация.

<Сергей М.>
Вот с тобой я ещё могу согласиться, просто я не так выразился.
Немного выше я пояснял про это.

<medved_68>
Повторюсь, я не правильно выразился.
Но всё же TClientSocket записывает данные в файл...Конечно это нельзя назвать компиляцией.
Что насчёт HEX-редактора - это просто:

var
f:tfilestream;
s:byte;
begin
f:=tfilestream.Create("C:\1.txt",fmopenread); //открыть для чтения
f.Seek($003f,soBeginning); //читать от начала файла с указанного адреса
f.Read(s,sizeof(s)); //в переменную "s" записывается код значения
f.Free;

Это только описание...если надо доведёшь до ума.

P.S.  Надеюсь сомнения развеялись...   :)


 
Сергей М. ©   (2007-02-16 14:57) [10]


> P.S.  Надеюсь сомнения развеялись


Наоборот добавились)

Ну с "компиляцией" ты, положим, облажался, а в чем собссно проблема-то ? До сих пор не понятно)


> TClientSocket записывает данные в файл


Ну не ври уже !)

Нет у этого компонента ни единого метода/св-ва, хоть каким-либо образом касающегося понятия "файл"


> я пробовал прередавать в текстовом формате)


Ну и накой ляд преобразовывать байт в два байта ?


 
Elen ©   (2007-02-16 15:07) [11]


> Wiktor   (16.02.07 14:48) [9]

Пусть сокет примет Стрим, который потом впихнеш в файл. Как делаеш? Может ошибка или недочет в проге?


 
Wiktor   (2007-02-16 15:48) [12]

<Сергей М.>
А как это называется,
s:= Socket.ReceiveText;
"Socket.ReceiveText" - принятие данных...


 
Wiktor   (2007-02-16 15:57) [13]

<Elen>

TRY
while pos <> DataSize do
begin
pos:=pos+1;    
s:=memo1.Lines.Strings[pos];
f.Seek(pos,soBeginning);
f.Write(s,sizeof(s));
end;
EXCEPT
showmessage("Ошибка");  //К примеру
label2.Caption:="Передача прервана";
exit;
END;
Data.Free;


 
Сергей М. ©   (2007-02-16 16:22) [14]


> Wiktor   (16.02.07 15:48) [12]


??

Это так и называется.
К твоей-то так называемой "проблеме" это какое отношение имеет ? Да никакого.

Ну да, ну есть такой метод у этого класса - и что ? Он тебе, спрашивается, нахрен нужен ? Да нахрен он тебе не нужен ! Тебе нужны [2]


 
Elen ©   (2007-02-16 16:32) [15]


> s:=memo1.Lines.Strings[pos];

Ты вообще со Стримом работать умееш? Стрим и ТString типа TMemo сильно отличаются. Забодь про Мемо если хочеш работать с Экзе.


 
Elen ©   (2007-02-16 16:33) [16]


> "Socket.ReceiveText" - принятие данных...

Это принятие текстовой строки, а тебе нужно принять бинарный поток. см. [2]


 
Сергей М. ©   (2007-02-16 16:40) [17]


> Elen ©   (16.02.07 16:33) [16]


> Это принятие текстовой строки


Да ну вас, барышня).. Ну что вы, ей-ей, трындите ?)

Генофонд-то всегда перед носом:

function TCustomWinSocket.ReceiveText: string;
begin
 SetLength(Result, ReceiveBuf(Pointer(nil)^, -1));
 SetLength(Result, ReceiveBuf(Pointer(Result)^, Length(Result)));
end;


Вот скоко есть в принимающем буфере (текст там или порнуха - неважно), столько и будет засандалено - безо всякого разбора ! - в строковый буфер...
И оно очевидно)


 
Elen ©   (2007-02-16 16:54) [18]


> Сергей М. ©   (16.02.07 16:40) [17]

Ну покрайней мере я не стану принимать бинарные данные через это свойство, а через ReceiveBuf. Ато еще взбредет в голову как строку использовать :)


 
Wiktor   (2007-02-16 17:13) [19]

<Сергей М.>
Извини...
TCustomWinSocket.ReceiveText: string;

Это ты использовал WinSocket или просто так процедуру назвал?


 
medved_68 ©   (2007-02-16 17:51) [20]


> Это ты использовал WinSocket или просто так процедуру назвал?

Wiktor   это вообще то код процедуры Socket.ReceiveText вернее его "пращура" TCustomWinSocket. :)))


 
Wiktor   (2007-02-16 19:21) [21]

А, ну да, возможно, плосле 14 часов за Delphi голова соображает туго...


 
Wiktor   (2007-02-18 00:38) [22]

А причём тут буфер (ReceiveBuf), ведь пользователи не смогут прочитать данные из моего буфера...А если б и смогли, то это скорее всего считалось бы нарушением политики безопасности.
"SerdStream" - ...
Например:
<Отправка>

var
 ms: TMemoryStream;
begin
...
ms:= TMemoryStream.Create;
ms.LoadFromFile ("C:\12.exe");
ms.Position:= 0;
Socket.SendText(IntToStr(ms.Size) + #0);
Socket.SendStream(ms);
ms.Free;
...


<Приём>

var
 s, sl: string;
begin
...
SetLength(sl, StrLen(PChar(s))+1); // +1 for the null terminator
   StrLCopy(@sl[1], PChar(s), Length(sl)-1);
   DataSize:= StrToInt(sl);
   Data:= TMemoryStream.Create;
   Delete(s, 1, Length(sl));
try
   Data.Write(s[1], length(s));
   if Data.Size = DataSize then
   begin
     Data.Position:= 0;
     data.SaveToFile("C:\123.exe"); //Именно про эту строку я и забыл
     Data.Free;
     Socket.Close;
   end;
except
   Data.Free;
end;


Казалось и делов то, но без вас я  бы не справился,
огромное СПАСИБО:
Separator
Сергей М.
Джо
Германн
Elen
medved_68
до скорых встреч...



Страницы: 1 вся ветка

Текущий архив: 2007.03.11;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.028 c
2-1171898542
r2d2
2007-02-19 18:22
2007.03.11
Ms Acces по сети


15-1171582908
WiFiLamer
2007-02-16 02:41
2007.03.11
По Wi-Fi


15-1171304695
Gerd
2007-02-12 21:24
2007.03.11
Хранение изображений.


1-1168947051
Ромка
2007-01-16 14:30
2007.03.11
Сочетания клавиш


15-1171275632
Layner
2007-02-12 13:20
2007.03.11
Кто знает, какие на mail.ru ограничения по отправке писем в день?