Консультация № 96035
23.07.2007, 09:28
0.00 руб.
0 2 2
Здравствуйте! У меня возник вопрос: как можно отправить файл на другой компьютер, если уже известен ip.

Обсуждение

Неизвестный
23.07.2007, 10:41
общий
это ответ
Здравствуйте, Iksmensp!
Кроме ip Вам должны быть известны Имя и Пароль для доступа к оному компьютеру.
В приложении:

Path - ‘\\‘+IP_Address+‘\IPC$‘;
User и Password знает администратор.

Порядок вызова функций:

ConnectToResource(Path,User,Password);
AddShare(IP_Address,‘C$‘,‘C:\‘,‘Стандартный общий ресурс‘);
//Здесь процедура копирования
DisconnectFromResource(Path)

Приложение:
uses ActiveDs_TLB, ActiveX, ComObj;function ConnectToResource(const Path,User,Password: string): DWord; var NET: TNetResource; begin NET.dwScope := RESOURCE_GLOBALNET; NET.dwType := RESOURCETYPE_ANY; NET.dwDisplayType := RESOURCEDISPLAYTYPE_SHARE; NET.dwUsage := RESOURCEUSAGE_CONNECTABLE; NET.lpLocalName := nil; NET.lpComment := nil; NET.lpProvider := nil; NET.lpRemoteName := PChar(Path); Result:=WNetAddConnection2(NET,PChar(Password),PChar(User),0); end;procedure DisconnectFromResource(const Path: string);begin WNetCancelConnection2(PChar(Path),0,True);end;function GetObject(const Name: string): IDispatch;var Moniker: IMoniker; Eaten: integer; BindContext: IBindCtx; Dispatch: IDispatch;begin OleCheck(CreateBindCtx(0, BindContext)); OleCheck(MkParseDisplayName(BindContext, StringToOleStr(Name), Eaten, Moniker)); OleCheck(Moniker.BindToObject(BindContext, NIL, IDispatch, Dispatch)); Result := Dispatch;end;function AddShare(const Computer, Share, Path, Description: string): string;var objComputer: IADsContainer; objShare: IADsFileShare;begin Result:=‘Шара добавлена успешно.‘; try objComputer:=GetObject(‘WinNT://‘+Computer+‘/LanmanServer‘) as IADsContainer; objShare:=objComputer.Create(‘FileShare‘, Share) as IADsFileShare; objShare.Path:=Path; objShare.Description:=Description; objShare.SetInfo; except on E: Exception do begin Result:=‘Шару добавить не удалось. Ошибка = ‘+E.Message; end; end;end;
Неизвестный
23.07.2007, 11:23
общий
это ответ
Здравствуйте, Iksmensp!

Если я правильно понял вопрос, то испульзуем связку клиент-сервер.
На Клиентской части (откуда отправляем файл):
на форму кидаем:
- OpenDialog
- с закладки Internet - NMStrm, в Host пишем ip-адрес кому надо отправить файл.
- Кнопку, в обработчике события Button1Click пишем:
var MyStream: TMemoryStream;
begin
if OpenDialog.Execute then
begin
NMStrm1.fromName = ExtractFileName(OpenDialog.FileName);
MyStream := TMemoryStream.Create;
MyStream.LoadFromFile(OpenDialog.FileName);
NMStrm1.PostIt(MyStream);
MyStream.Free;
end;
end;
на стороне сервера (куда отсылаем файл):
на форму кидаем:
- с закладки Internet - NMStrmServ1
в обработчик события OnMSG пишем:
var MyStream: TMemoryStream;
begin
MyStream := TMemoryStream.Create;
MyStream.CopyFrom(strm, NMStrmServ1.BytesTotal);
Name_File:= ‘c:\temp\‘+sFrom; // или как вверху - вставить OpenDialog
MyStream.SaveToFile(Name_File);
end;

Присланный файл сохраняется в папке c:\temp

Надейсь мой опыт вам пригодиться.
Форма ответа