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

Вниз

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

 
Zhekacoder   (2006-05-08 22:59) [0]

Как передать файл по сети с помощью TCPServer и TCPClient?


 
XProger ©   (2006-05-09 00:23) [1]

пакетами


 
Zhekacoder   (2006-05-09 07:38) [2]

Я спрашиваю не чем, а как?

Хотелось бы рабочий код, я делаю так: отсылаю поток из клиента серверу, как мне его сервером принять, какую функцию использовать?


 
Лев   (2006-05-09 13:18) [3]

На счет TCPServer и TCPClient не знаю - не работал, а вот на TClientSocket/TServerSocket рабочий пример.
(Наверно должно быть что-то похожее...)


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.


 
Zhekacoder   (2006-05-09 18:16) [4]

Спасиб большое! Буду рабатать дальше


 
PATRIOT ©   (2006-07-05 01:17) [5]

а как сделать так чтобы прочитать хидер (тело) файла и уже самим его отправить?

p.s. просто у тебя в примере ты отправляешь картинку уже впаяную в TImage.


 
medved_68 ©   (2006-07-05 10:55) [6]


> PATRIOT


> а как сделать так чтобы прочитать хидер (тело) файла и уже
> самим его отправить?


Var
Potok:=TFileStream;Potok1:TMemoryStream;Saze:Int64;T:Boolean;
begin
Potok:=TFileStream.Create("Путь к твоему файлу",fmOpenRead);
Potok1:=TMemoryStream.Create;
Saze:=Potok.Size;
Potok1.WriteBuffer(Saze,8);
Potok1.CopyFrom(Potok,Potok.Size);
Potok.Free;
Potok1.Position:=0;
t:=ServerSocket1.Socket.Connection[0].SendStream(Potok1);
If t then showmessage("Sending OK!")
 else showmessage("Sending ERROR!");



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

Форум: "Сети";
Текущий архив: 2006.11.26;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.041 c
1-1160674493
Sanya_BBB
2006-10-12 21:34
2006.11.26
Как в через w.activedocument сделать адьбомную страницу?


2-1163063007
Marat
2006-11-09 12:03
2006.11.26
Как проверить наличиетаблицы


2-1162289534
Muhh
2006-10-31 13:12
2006.11.26
Как в combobox добавить картинку??


11-1137793297
BeZ
2006-01-21 00:41
2006.11.26
По поводу черного цвета вместо системного


2-1163094373
yuraspb
2006-11-09 20:46
2006.11.26
У кого какие мысли?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский