Стоит задача написания клиент-сервера. У меня Delphi2006 на вкладке Internet имеются компоненты TTcpClient и TTcpServer. Так же есть куча компонентов Indy. В Delphi7 был примерчик NetChat, который демонстрировал наглядно работу TTcpClient и TTcpServer. Возникает вопрос стоит ли использовать TTcpClient и TTcpServer или все же лучше Indy. На сколько актуальны эти (TTcpClient и TTcpServer) компонеты на сегодняшний день.
Re: Delphi 2006 организовать клиент серверное приложение
Дело в том что я хочу построить клиент-сервер. В делфях есть пример 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;
Попробуй посмотри, может что и подчеркнешь, а что и примишь!!!
А у меня есть вопросик, не встречал ли ты такую ошибку (List index out of bounds (1)) !!!???
Пришел, увидел, загрузил :)
Мы, как волшебники творим волшебство!!!
Re[2]: Delphi 2006 организовать клиент серверное приложение
Здравствуйте, Poter, Вы писали:
P>Попробуй посмотри, может что и подчеркнешь, а что и примишь!!! P>А у меня есть вопросик, не встречал ли ты такую ошибку (List index out of bounds (1)) !!!??? http://files.rsdn.ru/80271/Proby%20Delphi.rar
Пришел, увидел, загрузил :)
Мы, как волшебники творим волшебство!!!
Re[2]: Delphi 2006 организовать клиент серверное приложение
Для того чтобы сервер мог отсылать клиенту данные, сервер должен быть клиентом, а клиент — сервером
Суть такова — сервер может только отдавать какие-то данные клиенту в ответ на его запрос. (возможно, я ошибаюсь — давно уже такие штуки не писал)
Вариант решения — посылать на сервер команду, а на сервере запускать отдельный поток с отдельным идентификатором, который и возвратить клиенту сразу (возможно, с временем примерного ожидания ответа). А с клиента после этого раз в сколько-нибудь секунд посылать на сервер запрос — выполнилась задача или нет.
Здравствуйте, DelphiLexx, Вы писали:
DL>Я сделал клиента и сервер, от клиента на сервак данные приходят, а вот от сервака на клиент почему то нет. В чем может быть проблема?
Re[3]: Delphi 2006 организовать клиент серверное приложение
Здравствуйте, silent_roach, Вы писали:
_>Для того чтобы сервер мог отсылать клиенту данные, сервер должен быть клиентом, а клиент — сервером _>Суть такова — сервер может только отдавать какие-то данные клиенту в ответ на его запрос. (возможно, я ошибаюсь — давно уже такие штуки не писал)
Ошибаетесь, слать можна в любую сторону, все зависит от реализации протокола.
Re[4]: Delphi 2006 организовать клиент серверное приложение
Здравствуйте, Danchik, Вы писали:
D>Здравствуйте, silent_roach, Вы писали:
_>>Для того чтобы сервер мог отсылать клиенту данные, сервер должен быть клиентом, а клиент — сервером _>>Суть такова — сервер может только отдавать какие-то данные клиенту в ответ на его запрос. (возможно, я ошибаюсь — давно уже такие штуки не писал) D>Ошибаетесь, слать можна в любую сторону, все зависит от реализации протокола.