![]() |
|
|||||||
![]() |
|
|
Опции темы |
|
|
#1 |
|
Пользователь
|
Парни кто может помогите кто чем может! ДАйте плиз код или пример нормально и понятной передачи файлов через сокеты! Типа как в квипе... а не от сервера-клиенту
|
|
|
|
|
|
#2 | |
|
Пользователь
Регистрация: 08.07.2007
Сообщений: 47
Репутация: 17
|
Цитата:
Ты для начала литературу почитай какую нибуть, а потом за дело берись. |
|
|
|
|
|
|
#3 |
|
Модератор
Заслуженный модератор
|
Для данной цели можно воспользоваться компонентами 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 канал клуба программистов|Мои статьи |
|
|
|
|
|
#4 |
|
Модератор
Заслуженный модератор
|
ну или
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 канал клуба программистов|Мои статьи |
|
|
|
|
|
#5 |
|
Модератор
Заслуженный модератор
|
еще вариант
Здесь мы рассмотрим посылку файлов через сокет. Итак, как же послать файл по сокету? Очень просто! Достаточно лишь открыть этот файл как файловый поток (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 канал клуба программистов|Мои статьи |
|
|
|
|
|
#6 |
|
Новичок
Регистрация: 12.03.2010
Сообщений: 1
Репутация: 10
|
Этот способ очень хороший для отправки файлов. Но этот пример везде в нэте есть и нигде нету примера как от сервера клиенту отправить файл? Можешь помочь с этим вопросом? Типа как в TcpClient'e пришол пакет и есть переменная Socket, за которую можно зацепиться и отослать на этот сокет инфу, а как тут такое сделать.
Поставить на клиентской программе nmStrmServ исключено потому что простые юзеры не могут делать перенаправление портов в роутере для того чтобы принять файл. Заранее спасибо |
|
|
|
![]() |
| Опции темы | |
|
|
Похожие темы
|
||||
| Тема | Автор | Раздел | Ответов | Последнее сообщение |
| Открытие файлов через 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 |