Форум: "Сети";
Текущий архив: 2004.05.16;
Скачать: [xml.tar.bz2];
ВнизКак отправить файл по сети? Найти похожие ветки
← →
13-th Warrior (2004-03-20 19:28) [0]Может здесь кто нибуть поможет? Плиззз!
Как отправить файл по сети?
← →
Rezya © (2004-03-21 17:11) [1]Смотря каким образом ты хочешь это сделать.
ClientSocket or ServerSocket или WinApi Socket или какм либо другим способом?
← →
13-th Warrior (2004-03-21 18:32) [2]Любым, лишь бы полегче
← →
Yermek (2004-03-23 23:00) [3]Держи, ссылку не нашел так что...
99,9% работает
серверная часть
procedure SentFile;
var
P: ^Byte;
MS:TMemoryStrim
j:Integer;
ac:Integer;
begin
// Создаём буфер клиента для файла
MS := TMemoryStream.Create;
// Загружаем файл в буфер
MS.LoadFromFile("путь+имя файла");
ServerSocket1.Socket.Connections[j].SendText("file#" + name + "#"+IntToStr(MS.Size)+"#");
// Переводим каретку в начало файла
MS.Position := 0;
// Загружаем в переменную "P" файл
P := MS.Memory;
// Посылаем файл клиету
ServerSocket1.Socket.Connections[0].SendBuf(P^, MS.Size);
// записываем в журнал
end;
клиентская часть...
private
Name: string; // Имя файла
Size: integer; // Размер файла
Receive: boolean; // Режим клиента
MS: TMemoryStream; // Буфер для файла
{ процедура сохраняет принятые данные из сети в файл }
procedure Writing(Text: string);
begin
// Если принято байт меньше размера файла, то записываем в буфер
if MS.Size < Size then MS.Write(Text[1], Length(Text));
// Выводим прогресс закачки файла
Gauge1.Progress :=MS.Size;// MS.Size*100 div Size;
//StatusBar1.SimpleText := "Принято "+IntToStr(MS.Size)+" из "+IntToStr(Size);
// Если файл принят, то...
if MS.Size = Size then
begin
Receive := false; // Переводим клиента в нормальный режим
MS.Position := 0; // Переводим каретку в начало буфера
MS.SaveToFile(name); // Сохраняем файл
ClientSocket1.Socket.SendText("end"); // Посылаем команду "end", то есть файл принят
MS.Free; // Убиваем буфер
//StatusBar1.SimpleText := "Файл принят";
Panel3.Visible:=false;
end;
end;
procedure TfmSelectTest.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
var
sr_text: string; // Принятый текст
begin
sr_text := Socket.ReceiveText;
// Если клиент в режиме приёма файла, то...
if Receive then
// Записываем данные в буфер
Writing(sr_text)
// Если клиент не в режиме приёма файла, то...
else
begin
// если сервер посылает файл то...
if Copy(sr_text,0,Pos("#",sr_text)-1)="file" then // Если это файл, то...
begin
// Создаём буфер для файла
MS :=TMemoryStream.Create;
// Определяем имя файла
Delete(sr_text,1,Pos("#",sr_text));
// Определяем имя файла
Name :=Copy(sr_text,0,Pos("#",sr_text)-1);
// Определяем размер файла
Delete(sr_text, 1, Pos("#", sr_text));
// Определяем размер файла
Size := StrToInt(Copy(sr_text, 0, Pos("#", sr_text) -1));
Panel3.Visible:=True;
// Удаляем последний разделитель
Delete(sr_text, 1, Pos("#", sr_text));
// Выводим размер файла
Label1.Caption := "Размер файла: "+IntToStr(Size)+" байт";
// Выводим имя файла
Label2.Caption := "Имя файла: "+Name;
// Переводим сервер в режим приёма файла
Receive := true;
// Записываем данные в буфер
Writing(sr_text);
end;
end;
end;
← →
имя (2004-03-24 00:57) [4]Удалено модератором
← →
Александр1 © (2004-03-24 20:20) [5]Удалено модератором
Примечание: Оффтоп...
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2004.05.16;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.032 c