Delphi 2006 организовать клиент серверное приложение
От: DelphiLexx Россия  
Дата: 26.02.09 07:21
Оценка:
Стоит задача написания клиент-сервера. У меня Delphi2006 на вкладке Internet имеются компоненты TTcpClient и TTcpServer. Так же есть куча компонентов Indy. В Delphi7 был примерчик NetChat, который демонстрировал наглядно работу TTcpClient и TTcpServer. Возникает вопрос стоит ли использовать TTcpClient и TTcpServer или все же лучше Indy. На сколько актуальны эти (TTcpClient и TTcpServer) компонеты на сегодняшний день.
Re: Delphi 2006 организовать клиент серверное приложение
От: DelphiLexx Россия  
Дата: 28.02.09 17:54
Оценка:
Дело в том что я хочу построить клиент-сервер. В делфях есть пример 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. Прилагаю исходники http://files.rsdn.ru/26841/ClientServer.rar
Re: Delphi 2006 организовать клиент серверное приложение
От: Poter Казахстан  
Дата: 03.03.09 16:53
Оценка:
Попробуй посмотри, может что и подчеркнешь, а что и примишь!!!
А у меня есть вопросик, не встречал ли ты такую ошибку (List index out of bounds (1)) !!!???
Пришел, увидел, загрузил :)
Мы, как волшебники творим волшебство!!!
Re[2]: Delphi 2006 организовать клиент серверное приложение
От: Poter Казахстан  
Дата: 03.03.09 17:11
Оценка:
Здравствуйте, Poter, Вы писали:

P>Попробуй посмотри, может что и подчеркнешь, а что и примишь!!!

P>А у меня есть вопросик, не встречал ли ты такую ошибку (List index out of bounds (1)) !!!???
http://files.rsdn.ru/80271/Proby%20Delphi.rar
Пришел, увидел, загрузил :)
Мы, как волшебники творим волшебство!!!
Re[2]: Delphi 2006 организовать клиент серверное приложение
От: silent_roach  
Дата: 04.03.09 10:36
Оценка:
Для того чтобы сервер мог отсылать клиенту данные, сервер должен быть клиентом, а клиент — сервером
Суть такова — сервер может только отдавать какие-то данные клиенту в ответ на его запрос. (возможно, я ошибаюсь — давно уже такие штуки не писал)
Вариант решения — посылать на сервер команду, а на сервере запускать отдельный поток с отдельным идентификатором, который и возвратить клиенту сразу (возможно, с временем примерного ожидания ответа). А с клиента после этого раз в сколько-нибудь секунд посылать на сервер запрос — выполнилась задача или нет.

Здравствуйте, DelphiLexx, Вы писали:

DL>Я сделал клиента и сервер, от клиента на сервак данные приходят, а вот от сервака на клиент почему то нет. В чем может быть проблема?
Re[3]: Delphi 2006 организовать клиент серверное приложение
От: Danchik Украина  
Дата: 04.03.09 12:28
Оценка:
Здравствуйте, silent_roach, Вы писали:

_>Для того чтобы сервер мог отсылать клиенту данные, сервер должен быть клиентом, а клиент — сервером

_>Суть такова — сервер может только отдавать какие-то данные клиенту в ответ на его запрос. (возможно, я ошибаюсь — давно уже такие штуки не писал)
Ошибаетесь, слать можна в любую сторону, все зависит от реализации протокола.
Re[4]: Delphi 2006 организовать клиент серверное приложение
От: silent_roach  
Дата: 05.03.09 05:04
Оценка:
OK, прошу прощения за дезинформацию =)

Здравствуйте, Danchik, Вы писали:

D>Здравствуйте, silent_roach, Вы писали:


_>>Для того чтобы сервер мог отсылать клиенту данные, сервер должен быть клиентом, а клиент — сервером

_>>Суть такова — сервер может только отдавать какие-то данные клиенту в ответ на его запрос. (возможно, я ошибаюсь — давно уже такие штуки не писал)
D>Ошибаетесь, слать можна в любую сторону, все зависит от реализации протокола.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.