Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.03.01;
Скачать: CL | DM;

Вниз

Передача файлов   Найти похожие ветки 

 
Vendict ©   (2008-01-12 11:04) [0]

Поиск по сабжу отдаёт исходники для 6й Delphi. нужно примерчик для 7й.
где только не искал, всё 6я ..


 
DVM ©   (2008-01-12 14:21) [1]

в чем вопрос?


 
Vendict ©   (2008-01-12 14:32) [2]

так те исходники используют компоненты, которых в 7й не наблюдается.
нужна реализация для 7й Delphi.


 
Сергей М. ©   (2008-01-12 16:37) [3]


>  компоненты, которых в 7й не наблюдается.


Какие конкретно ?


 
Vendict ©   (2008-01-12 16:45) [4]

TNMStrmServ
TNMStrm
TNMMsg
TClientSocket
TServerSocket


 
Сергей М. ©   (2008-01-12 16:53) [5]


> TNMStrmServ TNMStrm TNMMsg


Использовать эти компоненты не рекомендуется вообще.


> TClientSocketT ServerSocket


А эти лежат в пакете ($DELPHI)\BIN\dclsockets.bpl

Просто установи этот пакет и компоненты появятся в палитре


 
Vendict ©   (2008-01-12 17:11) [6]

продолжаем...

unit Unit1;

interface

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

type
 TForm1 = class(TForm)
   Image1: TImage;
   Image2: TImage;
   ClientSocket1: TClientSocket;
   ServerSocket1: TServerSocket;
   Button1: TButton;
   procedure Image1Click(Sender: TObject);
   procedure FormCreate(Sender: TObject);
   procedure ClientSocket1Connect(Sender: TObject;
     Socket: TCustomWinSocket);
   procedure ServerSocket1ClientRead(Sender: TObject;
     Socket: TCustomWinSocket);
   procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
 private
   { Private declarations }
   Reciving: boolean;
   DataSize: integer;
   Data: TMemoryStream;
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Image1Click(Sender: TObject);
begin
 // Это процедура для открытия сокета на ПРИЁМ (RECEIVING).
 // Button1.Click is this procedure as well.
 ClientSocket1.Active:= true;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 // Открытие ОТПРАВЛЯЮЩЕГО (SENDING) сокета.
 ServerSocket1.Active:= true;
end;

procedure TForm1.ClientSocket1Connect(Sender: TObject;
 Socket: TCustomWinSocket);
begin
 // Посылаем команду для начала передачи файла.
 Socket.SendText("send");
end;

procedure TForm1.ClientSocket1Read(Sender: TObject;
 Socket: TCustomWinSocket);
var
 s, sl: string;
begin
 s:= Socket.ReceiveText;
 // Если мы не в режиме приёма:
 if not Reciving then
 begin
   // Теперь нам необходимо получить длину потока данных.
   SetLength(sl, StrLen(PChar(s))+1); // +1 for the null terminator
   StrLCopy(@sl[1], PChar(s), Length(sl)-1);
   DataSize:= StrToInt(sl);
   Data:= TMemoryStream.Create;
   // Удаляем информацию о размере из данных.
   Delete(s, 1, Length(sl));
   Reciving:= true;
 end;
 // Сохраняем данные в файл, до тех пор, пока не получим все данные.
 try
   Data.Write(s[1], length(s));
   if Data.Size = DataSize then
   begin
     Data.Position:= 0;
     Image2.Picture.Bitmap.LoadFromStream(Data);
     Data.Free;
     Reciving:= false;
     Socket.Close;
   end;
 except
   Data.Free;
 end;
end;

procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
 Socket: TCustomWinSocket);
var
 ms: TMemoryStream;
begin
 // Клиент получает команду на передачу файла.
 if Socket.ReceiveText = "send" then
 begin
   ms:= TMemoryStream.Create;
   try
     // Получаем данные на передачу.
     Image1.Picture.Bitmap.SaveToStream(ms);
     ms.Position:= 0;
     // Добавляем длину данных, чтобы клиент знал, сколько данных будет передано
     // Добавляем #0 , чтобы можно было определить, где заканчивается информация о размере.
     Socket.SendText(IntToStr(ms.Size) + #0);
     // Посылаем его.
     Socket.SendStream(ms);
   except
     // Итак, осталось освободить поток, если что-то не так.
     ms.Free;
   end;
 end;
end;

end.


выдаёт "Asynchrous socket error 10061". в чём проблема ?


 
Сергей М. ©   (2008-01-12 17:17) [7]

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


> выдаёт "Asynchrous socket error 10061". в чём проблема ?


Клиент не смог подключиться к серверу - на интересующем клиента хосте/порту нет активного сервера.


 
Vendict ©   (2008-01-12 22:45) [8]

а какой пример стоит использовать ?
Base64 кодирование ? ведь должен же быть способ более проще..


 
DVM ©   (2008-01-13 14:31) [9]


> а какой пример стоит использовать ?

Тот который не от TNM....


> Base64 кодирование ? ведь должен же быть способ более проще.
> .

А причем тут вообще Base64 ?

Примеры Indy?, ICS посмотри.


 
Сергей М. ©   (2008-01-13 18:52) [10]


> Base64 кодирование ?


Какое еще нафих "кодирование", если даже с транспортом у тебя полная непонятка ?

Ты научись сначала надежной доставке данных, а уж потом будешь эти данные кодировать



Страницы: 1 вся ветка

Текущий архив: 2009.03.01;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.013 c
15-1230419786
Rubin
2008-12-28 02:16
2009.03.01
Подскажите где найти пример "управления рабочим столом"


15-1230976017
Alkid
2009-01-03 12:46
2009.03.01
Посоветуйте простой бесплатный персональный firewall


2-1231938227
Ruzzz
2009-01-14 16:03
2009.03.01
как-то на картинке карты земли находить точку по широте и долготе


15-1230831771
Riply
2009-01-01 20:42
2009.03.01
Борьба с торможением компьютера.


2-1232350631
inviz
2009-01-19 10:37
2009.03.01
Как закрепить канвас