Модераторы: Snowy, Poseidon, MetalFan

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> BDS 2006 организовать клиент серверное приложение, компоненты TTcpClient, TTcpServer 
:(
    Опции темы
Delphist
  Дата 26.2.2009, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphist Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2145
Регистрация: 3.2.2004
Где: всегда в сети

Репутация: нет
Всего: 3



Стоит задача написания клиент-сервера. У меня Delphi2006 на вкладке Internet имеются компоненты TTcpClient и TTcpServer. Так же есть куча компонентов Indy. В Delphi7 был примерчик NetChat, который демонстрировал наглядно работу TTcpClient и TTcpServer. Возникает вопрос стоит ли использовать TTcpClient и TTcpServer или все же лучше Indy. На сколько актуальны эти (TTcpClient и TTcpServer)  компонеты на сегодняшний день.


--------------------
ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др).
Когда-то давным-давно использовал это...
PM MAIL ICQ   Вверх
MetalFan
Дата 26.2.2009, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 14
Всего: 128



TIdTCPServer/TIdTCPClient дают больше возможностей, чем стандартные TTCPServer/client, хотя по сути оба являются обертками на сокетами.


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Delphist
Дата 26.2.2009, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphist Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2145
Регистрация: 3.2.2004
Где: всегда в сети

Репутация: нет
Всего: 3



Цитата(MetalFan @  26.2.2009,  11:43 Найти цитируемый пост)
TIdTCPServer/TIdTCPClient дают больше возможностей, чем стандартные TTCPServer/client, хотя по сути оба являются обертками на сокетами

А в чем именно их преимущество над TTCPServer/client


--------------------
ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др).
Когда-то давным-давно использовал это...
PM MAIL ICQ   Вверх
MetalFan
Дата 26.2.2009, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 14
Всего: 128



по пунктам перечислять желания нет. как и желания лезть в исходники те и другие, что можешь и сам сделать) хотябы сравнив св-ва и методы


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Delphist
Дата 26.2.2009, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphist Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2145
Регистрация: 3.2.2004
Где: всегда в сети

Репутация: нет
Всего: 3



Цитата(MetalFan @  26.2.2009,  14:20 Найти цитируемый пост)
по пунктам перечислять желания нет. как и желания лезть в исходники те и другие, что можешь и сам сделать) хотябы сравнив св-ва и методы

Понимаешь мне особо навороты не нужны, а TTcp* помоему проще.


--------------------
ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др).
Когда-то давным-давно использовал это...
PM MAIL ICQ   Вверх
MetalFan
Дата 26.2.2009, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 14
Всего: 128



если устраивает TTCP*, то тогда в чем проблема? пользуй его)


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Delphist
Дата 28.2.2009, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphist Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2145
Регистрация: 3.2.2004
Где: всегда в сети

Репутация: нет
Всего: 3



Цитата(MetalFan @ 26.2.2009,  16:10)
если устраивает TTCP*, то тогда в чем проблема? пользуй его)

Остановился я на компонентах TTcp*

Дело в том что я хочу построить клиент-сервер. В делфях есть пример NetChat, там приложение является одновременно и клиентом и сервером.
У меня же задача следующая - есть клиент который передает серверу ID команды. Сервак согласно принятому ID выполняет ту или иную задачу (есть задачи которые быстро исполняются, а есть на которые нужно минуту и больше). После того как задача выполнена на клиет посылает код исполнения задачи.
Я так понимаю здесь нужно cделать так - на стороне клиента только использовать TTcpClient, а на стороне сервера только TTcpServer или все же нужно делать по тому же принципу как в NetChat?

Я сделал клиента и сервер, от клиента на сервак данные приходят, а вот от сервака на клиент почему то нет. В чем может быть проблема?

//КЛИЕНТ
Код

procedure TForm3.btnSendClick(Sender: TObject);
var
  i: integer;
begin

  //посылаем инфу на сервак
  try
    if TcpClient1.Connect then //--если убрать, то сообщения почему-то не передаются -->|
      for I := 0 to memSend.Lines.Count - 1 do                                        //|
        TcpClient1.Sendln(memSend.Lines[I]);                                          //|
  finally                                                                             //|
    TcpClient1.Disconnect;    //--хотя же в FormCreate TcpClient1.Active = True-------->|
  end;
end;

procedure TForm3.FormCreate(Sender: TObject);
begin

  TcpClient1.LocalHost := '127.0.0.1';
  TcpClient1.LocalPort := '5001';

  TcpClient1.RemoteHost := '127.0.0.1';
  TcpClient1.RemotePort := '5002';

  TcpClient1.Active := True;
end;

procedure
  TForm3.TcpClient1Receive(Sender: TObject; Buf: PAnsiChar;
  var DataLen: Integer);
begin

  //Сюда я так понимаю должна приходить инфа от TTcpServer'a
  memoAnswerFromServer.Text := Buf;
end;


//СЕРВЕР
Код


procedure TForm3.btnSendClick(Sender: TObject);
var
  I: integer;
begin

  //здесь я пытаюсь передать обратную инфу клиенту
  for I := 0 to memSend.Lines.Count - 1 do
    TcpServer1.Sendln(memSend.Lines[I]);
end;

procedure TForm3.FormCreate(Sender: TObject);
begin

  TcpServer1.LocalHost := '127.0.0.1';
  TcpServer1.LocalPort := '5002';

  TcpServer1.RemoteHost := '127.0.0.1';
  TcpServer1.RemotePort := '5001';
  TcpServer1.Active := True;
end;

procedure TForm3.TcpServer1Accept(Sender: TObject;
  ClientSocket: TCustomIpClient);
var
  s: string;
begin

  //инфа приходящая от сервака
  windows.Beep(500, 100);
  s := ClientSocket.LookupHostName(ClientSocket.RemoteHost) +
   ' (' + ClientSocket.RemoteHost + ')';

  Memo1.Lines.Add(s);
  s := ClientSocket.Receiveln;
  while s <> '' do
  begin
    Memo1.Lines.Add(s);
    s := ClientSocket.Receiveln;
  end;

  Memo1.Lines.Add('');
end;


P.S. Прилагаю исходники 



Присоединённый файл ( Кол-во скачиваний: 5 )
Присоединённый файл  ClientServer.rar 6,71 Kb


--------------------
ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др).
Когда-то давным-давно использовал это...
PM MAIL ICQ   Вверх
MetalFan
Дата 28.2.2009, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 14
Всего: 128



так ты на сервере пытаешься в сокет для прослушки что-то слать...
можно слать 
1. в OnAccept'e
Код

procedure TForm3.TcpServer1Accept(Sender: TObject;
  ClientSocket: TCustomIpClient);
var
  s: string;
  i: Integer;
begin

  //инфа приходящая от сервака
  windows.Beep(500, 100);
  s := ClientSocket.LookupHostName(ClientSocket.RemoteHost) +
   ' (' + ClientSocket.RemoteHost + ')';

  Memo1.Lines.Add(s);
  s := ClientSocket.Receiveln;
  while s <> '' do
  begin
    Memo1.Lines.Add(s);
    s := ClientSocket.Receiveln;
  end;
  Memo1.Lines.Add('');
//шлем данные
  for I := 0 to memSend.Lines.Count - 1 do
    ClientSocket.Sendln(memSend.Lines[I]);

 ClientSocket.Disconnect;

end;

2. в клиентские сокеты...

и принимать на клиенте надо сразу после посылки данных серверу, а не в OnRecieve (в случае с блок.сокетами)

и еще надо заметить, что код OnAccpet выполняется в ДОПОЛНИТЕЛЬНОМ потоке и лезть из него в компоненты на формы я бы не рекомендовал.

Это сообщение отредактировал(а) MetalFan - 28.2.2009, 22:19


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Delphist
Дата 1.3.2009, 01:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphist Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2145
Регистрация: 3.2.2004
Где: всегда в сети

Репутация: нет
Всего: 3



Цитата(MetalFan @  28.2.2009,  23:08 Найти цитируемый пост)
так ты на сервере пытаешься в сокет для прослушки что-то слать...

Не понял. Это ты про это:
Код

  //здесь я пытаюсь передать обратную инфу клиенту
  for I := 0 to memSend.Lines.Count - 1 do
    TcpServer1.Sendln(memSend.Lines[I]);


Скажи, пожалуйста, а TcpClient1Receive на клиенте тоже работает в ДОПОЛНИТЕЛЬНОМ потоке?

Это сообщение отредактировал(а) Delphist - 1.3.2009, 01:44


--------------------
ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др).
Когда-то давным-давно использовал это...
PM MAIL ICQ   Вверх
MetalFan
Дата 1.3.2009, 22:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 14
Всего: 128



Цитата(Delphist @  1.3.2009,  01:36 Найти цитируемый пост)
Это ты про это:

да, про это самое

Цитата(Delphist @  1.3.2009,  01:36 Найти цитируемый пост)
Скажи, пожалуйста, а TcpClient1Receive на клиенте тоже работает в ДОПОЛНИТЕЛЬНОМ потоке?

вроде бы нет. можешь сам в принципе посмотреть реализацию


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Delphist
Дата 2.3.2009, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphist Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2145
Регистрация: 3.2.2004
Где: всегда в сети

Репутация: нет
Всего: 3



Результаты долгих экспериментов,
За 26 часов, мною было проведено больше сотни экспериментов, на предмет синхронной и асинхронной передачи данных разными подходами, выдаю результаты:

INDY 9
Синхронная  +
Асинхронная +
Чтобы сделать реализацию кода надо выпить литр водки smile 

INDY 10
Синхронная  +
Асинхронная +
Чтобы сделать реализацию кода надо выпить 2 литра водки smile 
Недостаток Indy9 и Indy10 резко отличаются друг от друга smile 


Компоненты TTcp*
Синхронная  +
Асинхронная (через зад..цу)

Просты в использовании, но не работает четко асинхронная передача, нужно фентить
свойство BlockMode оказался по разному себя ведет в Delphi7 и BDS 2006

Компоненты TClientSocket и TServerSocket
Синхронная +
Асинхронная +

Компоненты forever
Четко прослеживается логика работы клиент-серверного приложения. Легки в эксплуатации. Очень гибкие, чтобы понять как они работают пить водку не придется smile 


Это сообщение отредактировал(а) Delphist - 2.3.2009, 11:07


--------------------
ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др).
Когда-то давным-давно использовал это...
PM MAIL ICQ   Вверх
Virtuals
Дата 2.3.2009, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 476
Регистрация: 27.11.2006

Репутация: 2
Всего: 11



Delphist
полностью согласен, из родных компонентов TClientSocket и TServerSocket самое оно.
из неродных имхо ICS.
PM MAIL ICQ   Вверх
Delphist
  Дата 2.3.2009, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphist Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2145
Регистрация: 3.2.2004
Где: всегда в сети

Репутация: нет
Всего: 3



Virtuals, вот где ты раньше был я убил два выходных чтобы прийти к этой истине smile 


--------------------
ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др).
Когда-то давным-давно использовал это...
PM MAIL ICQ   Вверх
Virtuals
Дата 2.3.2009, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 476
Регистрация: 27.11.2006

Репутация: 2
Всего: 11



Delphist
Цитата(Delphist @  2.3.2009,  11:43 Найти цитируемый пост)
вот где ты раньше был я убил два выходных чтобы прийти к этой истине 


как где? отмечал весну, и читал соседний форум на такую-же тему 

PM MAIL ICQ   Вверх
MetalFan
Дата 2.3.2009, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 14
Всего: 128



не возникало проблем с исползованием индей. водку литрами не пил, и так разобрался.
кстати, инди, afaik, используются сокеты в блокирующем режиме... так что непонятно, как автор проверял их в "Асинхронная +")



--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Закрытая темаСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.1113 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.