Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2009.03.01;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.004 c
2-1232366935
Pravitel
2009-01-19 15:08
2009.03.01
Turbo Pascal


2-1231401940
Patrick1968
2009-01-08 11:05
2009.03.01
Работа с графиками


15-1230523297
tButton
2008-12-29 07:01
2009.03.01
php


6-1199970944
samalex
2008-01-10 16:15
2009.03.01
Закачать файл на LINUX


2-1231942778
Scot Storch
2009-01-14 17:19
2009.03.01
нарисовать прямоугольник





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский