Форум программистов
 
Регистрация на форуме тут, о проблемах пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль

Купить рекламу на форуме 15-35 тыс рублей в месяц

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.02.2011, 01:13   #1
Don Karleone
Форумчанин
 
Регистрация: 05.04.2010
Сообщений: 410
По умолчанию обмен сообщениями между сервером и клиентом

Сразу скажу, что изучать компоненты Indy только начал, а по сему работать с ними еще не умею. Пытаюсь создать простенький чат. Использую компоненты IdTCPServer и IdTCPClient. Установить соединение между сервером и клиентом вроде получилось. Вот код установки соединения клиента с сервером:
Код:
// установка соединения с сервером
procedure TForm1.Button1Click(Sender: TObject);
begin
  try
    IdTCPClient1.Connect;
    ShowMessage('Соединение с сервером установлено');
  except
    ShowMessage('Сервер не найден');
    IdTCPClient1.Disconnect;
  end;
end;
Передавать сообщения серверу вроде тоже получилось:
Код:
procedure TForm1.Button2Click(Sender: TObject);
begin
  IdTCPClient1.WriteLn(Edit1.Text);  //отправка сообщения серверу
end;
Теперь сам сервер. При установки соединения
Код:
procedure TForm1.IdTCPServer1Connect(AThread: TIdPeerThread);
begin
  P:=AThread;  // P - глобальная переменная TIdPeerThread (я так
               // понимаю, что это 
               // ссылка на поток, который создает сервер для обслуживания
               // соедининия с клиентом
end;
Принятие сообщений от клиента:
Код:
procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
var
  s: string;
begin
  try
    s:=AThread.Connection.ReadLn + '  : принято';
    Memo1.Lines.Add(s);
  except
    ShowMessage('Разорвано соединение');
    AThread.Connection.Disconnect;
  end;
end;
Отправка сообщений клиенту:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  s: string;
begin
  s:=Edit1.Text + '  : отправлено';
  P.Connection.Write(s);  //отправить сообщение клиенту
  Memo1.Lines.Add(Edit1.Text + '  : отправлено');
end;
И наконец, сам вопрос. Как принять сообщение на стороне клиента от сервера (с дальнейшим добавлением этого сообщения в Memo)?
Помогите чайнику, плиз!!!
ICQ: 593-013-807
Don Karleone вне форума Ответить с цитированием
Старый 25.02.2011, 06:27   #2
BARNEY
Участник клуба
 
Регистрация: 23.04.2009
Сообщений: 1,058
По умолчанию

что было проще создай ещё одно подключение от сервака к клиенту. А так тема 100 раз поднималась.
вот вам ещё на будущие

http://programmersforum.ru/showthrea...E5%E4%E0%F7%E0

вместо файлов можете передавать текст.
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)

Последний раз редактировалось BARNEY; 25.02.2011 в 06:30.
BARNEY вне форума Ответить с цитированием
Старый 25.02.2011, 08:19   #3
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

У клиента ставите таймер (например на 100мс) и в нём пишем
Код:
var mes:string;
begin
 if IdTCPClient1.Connected then
  begin
   try
    mes:=IdTCPClient1.ReadLn;
    memo1.Lines.Add(mes); 
   except
    on EIdReadTimeOut do;//игнорируем ошибки таймаута
    else IdTCPClient1.Disconnect; 
   end;
  end;
end;
SERG1980 вне форума Ответить с цитированием
Старый 25.02.2011, 15:24   #4
Don Karleone
Форумчанин
 
Регистрация: 05.04.2010
Сообщений: 410
По умолчанию

в общем сделал следующим образом: на стороне клиента написал обработчик OnConnected:
Код:
procedure TForm1.IdTCPClient1Connected(Sender: TObject);
begin
  IdTCPClient1.Capture(Memo1.Lines);
end;
Еще пришлось на форму кинуть компонент IdAntiFreeze. Вроде заработало.
ICQ: 593-013-807
Don Karleone вне форума Ответить с цитированием
Ответ
Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обмен сообщениями(миничат) через IdTcpClient и idTcpServer =LeonZone= Работа с сетью в Delphi 3 07.08.2010 13:01
Знание протокола TCP под Linux, передача данных между клиентом и FTP сервером komis Помощь студентам 0 19.04.2010 17:20
Обмен сообщениями без IP адреса Иллидан Работа с сетью в Delphi 9 29.02.2008 20:48
обмен сообщениями между клиентом и сервером используя ClientSocket и ServerSocket xTANATOSx Работа с сетью в Delphi 3 04.10.2007 15:17
Обмен сообщениями между IdTcpClient и idTcpServer Teen4jump Работа с сетью в Delphi 3 05.09.2007 09:25