Форум: "Сети";
Текущий архив: 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.038 c