Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на Delphi и Lazarus


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты по данной тематике

Асмик Гаряка
Статус: Академик
Рейтинг: 8743
∙ повысить рейтинг »
Орловский Дмитрий
Статус: Советник
Рейтинг: 6829
∙ повысить рейтинг »
Boriss
Статус: Академик
Рейтинг: 2585
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / Delphi и Lazarus

Номер выпуска:1610
Дата выхода:08.12.2011, 22:30
Администратор рассылки:Киселёва Алёна aka Verena (Профессор)
Подписчиков / экспертов:249 / 177
Вопросов / ответов:1 / 1

Консультация # 184655: Здравствуйте! У меня возникли сложности с такой программой. Требуется написать приложение клиент и приложение сервер на DELPHI 7 с использованием протокола TCP и стандартного модуля WINSOCK в DELPHI. Клиент отправляет файлы(только файлы, если в директории каталоги - их игнорируем) из директории на сервер с указанием пути к директории. Серв...


Консультация # 184655:

Здравствуйте! У меня возникли сложности с такой программой.
Требуется написать приложение клиент и приложение сервер на DELPHI 7 с использованием протокола TCP и стандартного модуля WINSOCK в DELPHI. Клиент отправляет файлы(только файлы, если в директории каталоги - их игнорируем) из директории на сервер с указанием пути к директории.
Сервер сохраняет файлы в какой либо директории и в текстовом файле сохраняет путь к директории клиента, в которой хранятся файлы клиента. Клиент Отправляет запрос на восстановление данных с указанием пути к директории. Сервер возвращает файлы.
Я немного начал работу. Не совсем понимаю как передать файлы. Буду РАД ЛЮБОЙ ПОМОЩИ ИЛИ СОВЕТУ. Заранее благодарю.

Дата отправки: 02.12.2011, 21:51
Вопрос задал: Невалёный В. (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Киселёва Алёна aka Verena (Профессор):

Здравствуйте, Невалёный В.!
Вот пример передачи файла. К интерфейсу привязка минимальная, это Вы и сами сможете сделать.
Сервер:

Код :
var
  Form1: TForm1;
  WSA:TWSADATA;
   Sock, lst_sock:TSocket;
  addr:TSockAddr;

implementation

{$R *.dfm}

procedure serversocket;
 begin

     WSAStartup(MakeWord(1, 1), 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);
end;

procedure TForm1.Button1Click(Sender: TObject);   //кнопка Запустить сервер
begin
   serversocket;

end;

procedure SaveFile (filename: string);
var f: file;
    buf: array [1..256] of byte;
    k, s, c: integer;
begin
  assign (f, filename);
  rewrite (f, 1);
  recv (lst_sock, c, sizeof(c), 0);   //получаем размер файла
  k:= 1;   s:= 0;
  while (k>0) and (k<>SOCKET_ERROR) and (s<c) do  //пока читается и не достигнут размер файла
  begin
    k := recv (lst_sock, buf, sizeof(buf), 0);  //читаем блок
    s:= s+k;                                     //суммируем длину
    if (k>0) then BlockWrite (f, buf, k);        //пишем в файл
  end;
  close (f);
end;

procedure TForm1.Button2Click(Sender: TObject);  //кнопка Ожидать клиента
begin
     lst_sock := accept (sock, nil, nil);   //ожидание подключения
     ShowMessage('Подключен клиент');
     SaveFile ('C:\socket');
end;

Клиент:
Код :
var
  Form1: TForm1;
   s:TSocket;
 WSA:TWSAData;
 addr:TSockAddr;
implementation

{$R *.dfm}


 procedure SendFile(filename:string);     //отправляем файл
 var
 MyFile : file;
 buf: array [1..256] of byte;
 k: integer;
 begin
    assign (myfile, filename);
    reset (myfile, 1);
    k:= FileSize(myfile);    //получаем размер
    send (s, k, sizeof(k), 0); //шлём размер
    repeat
      BlockRead (myfile, buf, sizeof(buf), k); //читаем блок
      if (k>0) then send (s, buf, k, 0);       //шлём блок
    until k=0;
    close (myfile);

 end;

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

 function TForm1.InstallConnect : boolean;
 begin
 WSAStartup(MakeWord(1, 1), WSA);    //создаем сокет
 s := Socket(PF_INET, SOCK_STREAM, 0);
 addr.sin_family := AF_INET;
 addr.sin_port := htons(2222);//StrToInt (LabeledEdit2.Text));
 addr.sin_addr.S_addr := inet_addr(PAnsiChar('127.0.0.1'));//LabeledEdit1.Text));
 if (connect(s, Addr, SizeOf(Addr)) = SOCKET_ERROR) then begin
 CloseConnection;
 result:=false   end
 else result:=true;

 end;



procedure TForm1.Button1Click(Sender: TObject); //кнопка Отослать
begin
    SendFile ('C:\script.txt');
end;

procedure TForm1.BitBtn2Click(Sender: TObject);  //кнопка Соединиться
begin
 If InstallConnect then
      ShowMessage('Соединение установлено')
 else ShowMessage ('Не удалось установить соединение');

end;


Вам соответственно остаётся привязать к интерфейсу и сделать просмотр папки.
Удачи!

Консультировал: Киселёва Алёна aka Verena (Профессор)
Дата отправки: 08.12.2011, 00:35
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка  |  восстановить логин/пароль

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!



В избранное