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

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

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

Ответ
 
Опции темы
Старый 25.02.2011, 02:13   #1
Don Karleone
Форумчанин
 
Регистрация: 05.04.2010
Сообщений: 410
Репутация: 58

icq: 593-013-807
По умолчанию обмен сообщениями между сервером и клиентом

Сразу скажу, что изучать компоненты 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, 07:27   #2
BARNEY
Профессионал
 
Регистрация: 23.04.2009
Сообщений: 1,055
Репутация: 169

icq: 94-555555
По умолчанию

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

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

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

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

У клиента ставите таймер (например на 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, 16:24   #4
Don Karleone
Форумчанин
 
Регистрация: 05.04.2010
Сообщений: 410
Репутация: 58

icq: 593-013-807
По умолчанию

в общем сделал следующим образом: на стороне клиента написал обработчик OnConnected:
Код:

procedure TForm1.IdTCPClient1Connected(Sender: TObject);
begin
  IdTCPClient1.Capture(Memo1.Lines);
end;

Еще пришлось на форму кинуть компонент IdAntiFreeze. Вроде заработало.
__________________
ICQ: 593-013-807
Don Karleone вне форума   Ответить с цитированием
Ответ



Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обмен сообщениями(миничат) через 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 21:48
обмен сообщениями между клиентом и сервером используя ClientSocket и ServerSocket xTANATOSx Работа с сетью в Delphi 3 04.10.2007 15:17
Обмен сообщениями между IdTcpClient и idTcpServer Teen4jump Работа с сетью в Delphi 3 05.09.2007 09:25




18:44.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

купить трафик


как улучшить посещаемость, а также решения по монетизации сайтов, видео и приложений

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru