Форум программистов
Правила форума  |  Исходники Delphi  |  Основы Delphi  |  Блог программистов  |  Рассылка  |  Закажи футболку!  |  Конкурс программистов призы на 2000 руб


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

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

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

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

Для данной цели можно воспользоваться компонентами 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,884
Репутация: 1179
Отправить сообщение для Квэнди с помощью ICQ
По умолчанию

ну или

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(Send er: 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.st ream.html', fmCreate or fmShareDenyWrite);
end;

procedure TForm1.ServerSocket1ClientConnect(S ender: TObject;
Socket: TCustomWinSocket);
begin
Socket.SendStream(TFileStream.Creat e('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 канал клуба программистов|Мои статьи
Квэнди вне форума   Ответить с цитированием
Старый 01.08.2007, 08:51   #5
Квэнди
Модератор
Заслуженный модератор
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Адрес: Москва
Сообщений: 3,884
Репутация: 1179
Отправить сообщение для Квэнди с помощью ICQ
По умолчанию

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



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




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

Если ни один из приведенных не помог, читайте матчасть )
__________________
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума   Ответить с цитированием
Старый 09.07.2010, 21:55   #6
Jurec
Новичок
 
Регистрация: 12.03.2010
Сообщений: 1
Репутация: 10
По умолчанию

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


Все интернет-магазины Москвы на Викимарте: компьютеры и софт, художественные книги и профессиональная литература, наручные часы.



04:00.


Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.

Ask Doctor at Healpth.com