Пятница, 29.03.2024, 13:23 Приветствую вас Гость | Группа "Гости" 
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: Волк-1024  
delphicode » Delphi » Windows API в Delphi » WinSock передача файла (Передача файла через сокеты)
WinSock передача файла
gravitasДата: Воскресенье, 10.04.2011, 18:32 | Сообщение # 1
Авторитетный
Зарегистрирован: 01.05.2010
Группа: Пользователи
Сообщений: 385
Статус: Offline
Демонстрация простой передачи файлов через TCP сокеты. В инете подобного вроде бы нет. Код без всякого рода указателей на файл и т.д. Простая передача и прием.

Клиент (передатчик):

Code
program Project1;

{$APPTYPE CONSOLE}

uses
     windows,
     winsock;

const
Port = 2222;
IP = '10.10.10.10.';
Name = 'C:\11.exe';
var
s:TSocket;
WSA:TWSAData;
addr:TSockAddr;

procedure SendFile(filename:string);
var
MyFile : file;
n : integer;
Buff : array [1..127] of byte;
begin
     FileMode:=0;
     AssignFile(MyFile, filename);
     Reset(MyFile, 1);
     while not eof(MyFile) do begin
     blockread(MyFile,buff,sizeof(buff),n);
     send(s,buff,sizeof(buff),0);
//  sleep(5);
     end;
writeln('Sended');
end;

function InstallConnect : boolean;
begin
WSAStartup(MakeWord(2, 0), WSA);
s := Socket(PF_INET, SOCK_STREAM, 0);
addr.sin_family := AF_INET;
addr.sin_port := htons(port);
addr.sin_addr.S_addr := inet_addr(ip);
if (connect(s, Addr, SizeOf(Addr)) = 0) then
result:=true else result:=false;
end;

procedure Close;
begin
CloseSocket(s);
WSACleanup;
end;

begin
If InstallConnect then
SendFile(name);
Close();
readln;
end.

Сервер (получатель):

Code
program Project1;
{$APPTYPE CONSOLE}
uses
     windows,
     winsock;

const
Port = 2222;
name = 'D:\111.exe';

var
WSA:TWSADATA;
Sock, lst_sock:TSocket;
addr:TSockAddr;
f:file;
buf:array[1..127] of byte;

procedure write;                      
begin
while recv(sock,buf,127,0)>0 do
blockwrite(f,buf,sizeof(buf));
end;

procedure Install;
var
f:file;
begin
     WSAStartup(MakeWord(2, 0), WSA);
     sock := socket(PF_INET, SOCK_STREAM, 0);
     addr.sin_family := PF_INET;
     addr.sin_port := htons(2222);
     addr.sin_addr.s_addr := INADDR_ANY;
     bind(sock, addr, sizeof(addr));
     listen(sock, SOMAXCONN);
     lst_sock := accept(sock, nil, nil);

FileMode:=2;
AssignFile(f, name);
Rewrite(f, 1);

while recv(lst_sock,buf,127,0)>0 do begin
writeln('Downloading...');
blockwrite(f,buf,sizeof(buf));
end;

CloseFile(f);
writeln('File recved');
readln;
end;

begin
randomize();
Install;
end.

© Gravitas


TheDeduction

Для ускорения получения ответов на ваши вопросы рекомендуется подкармливание в виде +'ов в рейтинг :)
 
delphicode » Delphi » Windows API в Delphi » WinSock передача файла (Передача файла через сокеты)
  • Страница 1 из 1
  • 1
Поиск:

delphicode.ru © 2008 - 2024 Хостинг от uCoz