Демонстрация простой передачи файлов через 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