Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.03.11;
Скачать: [xml.tar.bz2];

Вниз

Передача 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.036 c
2-1171959306
vitv
2007-02-20 11:15
2007.03.11
DBGrid11CellClick(Column: TColumn);-вопрос реализации


2-1171980520
koha
2007-02-20 17:08
2007.03.11
передать в функцию переменную любого типа


2-1171985997
Vlad Oshin
2007-02-20 18:39
2007.03.11
Передать фокус в dbgrig(ячейку) из WebBrowser. не получается


2-1171722811
Andrey-406
2007-02-17 17:33
2007.03.11
Сохранение-загрузка свойств формы


2-1171975449
Познающий
2007-02-20 15:44
2007.03.11
Доступ к ресурсам





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