Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.07.2007, 21:26   #1
CHITER
Пользователь
 
Аватар для CHITER
 
Регистрация: 02.07.2007
Сообщений: 11
По умолчанию передачи файлов через сокеты

Парни кто может помогите кто чем может! ДАйте плиз код или пример нормально и понятной передачи файлов через сокеты! Типа как в квипе... а не от сервера-клиенту
CHITER вне форума Ответить с цитированием
Старый 31.07.2007, 22:40   #2
Mitriy
Пользователь
 
Регистрация: 08.07.2007
Сообщений: 47
По умолчанию

Цитата:
Сообщение от CHITER Посмотреть сообщение
Парни кто может помогите кто чем может! ДАйте плиз код или пример нормально и понятной передачи файлов через сокеты! Типа как в квипе... а не от сервера-клиенту
А че тока код те дать??? Те мот сразу готовую прогу дать???
Ты для начала литературу почитай какую нибуть, а потом за дело берись.
Mitriy вне форума Ответить с цитированием
Старый 01.08.2007, 08:50   #3
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

Для данной цели можно воспользоваться компонентами TNMStrmServ и TNMStrm, которые предназначены для обмена потоками данных.

Обработчик для клиента:



var
MyStream: TMemoryStream;
begin
MyStream := TMemoryStream.Create;
MyStream.LoadFromFile('c:\windows\р абочий стол\DelphiWorld.txt');
NMStrm1.PostIt(MyStream);
MyStream.Free;
end;




Обработчик для сервера:



procedure TForm1.NMStrmServ1MSG(Sender: TComponent;
const sFrom: string; strm: TStream);
var
MyStream: TMemoryStream;
begin
MyStream := TMemoryStream.Create;
MyStream.CopyFrom(strm, NMStrmServ1.BytesTotal);
MyStream.SaveToFile('c:\windows\раб очий стол\DelphiWorld2.txt');
end;
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 01.08.2007, 08:50   #4
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

ну или
Код:
unit Unit1; 

interface 

uses 
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
  Dialogs, ScktComp, StdCtrls; 

type 
  TForm1 = class(TForm) 
    ClientSocket1: TClientSocket; 
    ServerSocket1: TServerSocket; 
    btnTestSockets: TButton; 
    procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket); 
    procedure FormCreate(Sender: TObject); 
    procedure FormDestroy(Sender: TObject); 
    procedure ClientSocket1Disconnect(Sender: TObject; 
      Socket: TCustomWinSocket); 
    procedure ClientSocket1Connect(Sender: TObject; 
      Socket: TCustomWinSocket); 
    procedure ServerSocket1ClientConnect(Sender: TObject; 
      Socket: TCustomWinSocket); 
    procedure btnTestSocketsClick(Sender: TObject); 
  private 
    FStream: TFileStream; 
    { Private-Deklarationen } 
  public 
    { Public-Deklarationen } 
  end; 

var 
  Form1: TForm1; 

implementation 

{$R *.dfm} 

procedure TForm1.ClientSocket1Read(Sender: TObject; 
  Socket: TCustomWinSocket); 
var 
  iLen: Integer; 
  Bfr: Pointer; 
begin 
  iLen := Socket.ReceiveLength; 
  GetMem(Bfr, iLen); 
  try 
    Socket.ReceiveBuf(Bfr^, iLen); 
    FStream.Write(Bfr^, iLen); 
  finally 
    FreeMem(Bfr); 
  end; 
end; 

procedure TForm1.FormCreate(Sender: TObject); 
begin 
  FStream := nil; 
end; 

procedure TForm1.FormDestroy(Sender: TObject); 
begin 
  if Assigned(FStream) then 
  begin 
    FStream.Free; 
    FStream := nil; 
  end; 
end; 

procedure TForm1.ClientSocket1Disconnect(Sender: TObject; 
  Socket: TCustomWinSocket); 
begin 
  if Assigned(FStream) then 
  begin 
    FStream.Free; 
    FStream := nil; 
  end; 
end; 

procedure TForm1.ClientSocket1Connect(Sender: TObject; 
  Socket: TCustomWinSocket); 
begin 
  FStream := TFileStream.Create('c:\temp\test.stream.html', fmCreate or fmShareDenyWrite); 
end; 

procedure TForm1.ServerSocket1ClientConnect(Sender: TObject; 
  Socket: TCustomWinSocket); 
begin 
  Socket.SendStream(TFileStream.Create('c:\temp\test.html', fmOpenRead or fmShareDenyWrite)); 
end; 

procedure TForm1.btnTestSocketsClick(Sender: TObject); 
begin 
  ServerSocket1.Active := True; 
  ClientSocket1.Active := True; 
end; 

end.
Все это как ни странно находится за 5 минут
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи

Последний раз редактировалось Stilet; 18.12.2013 в 16:45.
Квэнди вне форума Ответить с цитированием
Старый 01.08.2007, 08:51   #5
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

еще вариант
Здесь мы рассмотрим посылку файлов через сокет. Итак, как же послать файл по сокету? Очень просто! Достаточно лишь открыть этот файл как файловый поток (TFileStream) и отправить его через сокет (SendStream)! Рассмотрим это на примере:

Код:

{Посылка файла через сокет}
procedure SendFileBySocket(filename: string);
var 
  srcfile: TFileStream;
begin
  {Открываем файл filename}
  srcfile := TFileStream.Create(filename,fmOpenRead);
  {Посылаем его первому подключенному клиенту}
  ServerSocket1.Socket.Connections[0].SendStream(srcfile);
  {Закрываем файл}
  srcfile.Free;
end;


Нужно заметить, что метод SendStream используется не только сервером, но и клиентом (ClientSocket1.Socket.SendStream(sr cfile))

Если ни один из приведенных не помог, читайте матчасть )
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи

Последний раз редактировалось Stilet; 18.12.2013 в 16:45.
Квэнди вне форума Ответить с цитированием
Старый 09.07.2010, 21:55   #6
Jurec
 
Регистрация: 12.03.2010
Сообщений: 3
По умолчанию

Этот способ очень хороший для отправки файлов. Но этот пример везде в нэте есть и нигде нету примера как от сервера клиенту отправить файл? Можешь помочь с этим вопросом? Типа как в TcpClient'e пришол пакет и есть переменная Socket, за которую можно зацепиться и отослать на этот сокет инфу, а как тут такое сделать.
Поставить на клиентской программе nmStrmServ исключено потому что простые юзеры не могут делать перенаправление портов в роутере для того чтобы принять файл. Заранее спасибо
Jurec вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Открытие файлов через TreeView Xardas Общие вопросы Delphi 12 29.03.2008 11:30
Сокеты ben95 Общие вопросы Delphi 7 09.03.2008 23:26
Пересылка нетипизированных файлов через модем (как в гипертерминале) naumovmag Софт 1 21.09.2007 22:13
сокеты cross Работа с сетью в Delphi 2 21.12.2006 18:12