Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.02.2013, 04:05   #1
swillrocker
Пользователь
 
Регистрация: 04.05.2011
Сообщений: 44
По умолчанию TCP, UPD, IPX переслать файл

Нужно переслать файл по протоколам TCP, UDP, IPX и произвести замер времени пересылки файла(для сравнения). Есть ли у кого исходники? Вот есть пересылка файла по TCP, но не знаю работает ли...

Клиент
Код:
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.
Сервер
Код:
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.
swillrocker вне форума Ответить с цитированием
Старый 05.02.2013, 08:14   #2
swillrocker
Пользователь
 
Регистрация: 04.05.2011
Сообщений: 44
По умолчанию

Вот ещё пример на indy 10, только не компилится что-то...
Код:
program SendFile;

{$APPTYPE CONSOLE}

uses
  SysUtils, Classes,
  IdContext, IdIOHandler, IdTCPClient, IdTCPServer;

const
  CPORT = 9999;
  CHOST = 'localhost';
  CTestFile = 'c:\test.txt';
  CResultFile = 'c:\test.out';

type
  TDummyClass = class
  protected
    class procedure Server;
    class procedure Client;
    class procedure Send( IOHandler : TIdIOHandler; const AFileName : String );
    class procedure Execute(AContext: TIdContext);
  end;

{ TDummyClass }

class procedure TDummyClass.Server;
begin
  with TIdTCPServer.Create do
  try
    DefaultPort := CPORT;
    OnExecute := Execute;
    Active := true;
    Client;
  finally
    Free
  end;
end;

class procedure TDummyClass.Client;
begin
  with TIdTCPClient.Create do
  try
    Port := CPORT;
    Host := CHOST;
    Connect;
    Send( IOHandler, CTestFile );
    Disconnect;
  finally
    Free
  end;
end;

class procedure TDummyClass.Execute(AContext: TIdContext);
var
  Stream : TMemoryStream;
begin
  Stream := TMemoryStream.Create;
  try
    with AContext.Connection, IOHandler do
    try
      ReadStream( Stream, ReadLongInt( true ), false );
      WriteLn( 'OK' );
      Stream.SaveToFile( CResultFile );
    finally
      Disconnect;
    end;
  finally
    FreeAndNil( Stream );
  end;
end;

class procedure TDummyClass.Send(IOHandler: TIdIOHandler;
  const AFileName: String);
var
  FileStream : TFileStream;
begin
  FileStream := TFileStream.Create( AFileName, fmOpenRead, fmShareDenyNone );
  with IOHandler do
  try
    Write( FileStream, -1, true );
    ReadLn;
  finally
    FreeAndNil( FileStream );
  end;
end;

begin
  TDummyClass.Server;
end.
swillrocker вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Переслать файл Win Serv 2003 MixanMM Windows 5 20.05.2011 10:51
Переслать файл Lemo Помощь студентам 8 07.06.2010 20:51
Переслать файл Lemo Помощь студентам 2 04.05.2010 19:00
Как переслать файл по сети через DCOM Hollander Общие вопросы C/C++ 6 23.05.2007 22:32
Помогите переслать файл с клиента на сервер mager Gamedev - cоздание игр: Unity, OpenGL, DirectX 8 23.02.2007 18:58