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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> помогите с TTcpServer 
V
    Опции темы
lubja
Дата 26.8.2008, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 26.8.2008
Где: Ростов-на-Дону

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



пишу простой чат, типа сервер-клиент. клиентом у меня является регистратор. работает это так: регистратор отсылает сообщение серверу, тот отсылает ему что-то, регистратор, получив ответ, тут же отвечает, что "все нормуль, получил". будем это называть сессией. вроде все работает, но! проблема в том, что может происходить только одна сессия! если регистратор пытается тут же отправить еще одно сообщение серверу, то оно уже не доходит до него (смотрела по отладчику: в последующих сессиях на сервере не срабатывает OnAccept).
вот код этой процедуры (может я что-то не так делаю...  smile smile  ):

procedure TFrmServer.TcpServerAccept(Sender: TObject; ClientSocket: TCustomIpClient);
var msg, com: string;
begin
  msg := ClientSocket.Receiveln();  //строка приходит в виде 'SEND|сообщение' либо 'SUCCESS|сообщение'
  while length(msg) > 0 do
    begin
      //функция Command разбивает сообшение на команду (com) и само сообщение (msg)
      com := Command(msg, True);
      msg := Command(msg, False);
      MsgLog.Lines.Add(msg);
      //команда SEND - что регистратор первый раз отсылает сообщение
      if com = 'SEND' then
        begin
          newMsg := FindUser(msg);  //сервер находит в базе сообщение, которое нужно отправить регистратору
          ClientSocket.Sendln(newMsg);         //  Отправить ее обратно
          msg := ClientSocket.Receiveln(); //  Получить очередную строку
        end;
      //команда SUCCESS - уведомляет, что регистратор получил ответ от сервера
      if com = 'SUCCESS' then
        begin
          ChangeUser(msg);
          msg := ''; com := '';  //я обнуляю сообщение и команду, чтобы больше не проводились никакие действия
        end;
    end;
  ClientSocket.Disconnect;  //даже если я убираю эту строчку, все равно та же фигня...
end;

помогите кто, чем может! плиз!!!  smile 
PM MAIL   Вверх
SneG0K
Дата 26.8.2008, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


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

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



Ну как бы не TTcpServer а просто TcpServer. Потом еще как бы надо использовать кнопочку код... 
Теперь по сути, вроде в коде все в порядке... Выложи код клиента... 

Цитата(lubja @  26.8.2008,  11:08 Найти цитируемый пост)
не срабатывает OnAccept

Уверена, что клиент отсылает второй раз?

Добавлено через 40 секунд
Попробуй динамически создавать TCpServer
PM WWW Skype   Вверх
lubja
Дата 26.8.2008, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 26.8.2008
Где: Ростов-на-Дону

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



вот код регистратора, порцедура при нажатии кнопки "отправить":

procedure TFormMain.BtnOkClick(Sender: TObject);
var s: string;
begin
  if TcpClient.Connected then
    begin
      TcpClient.Sendln('SEND|' + LEditKey.Text);
      s := TcpClient.Receiveln();
      if s = '' then
        ShowMessage('Проверьте правильность номера!')
      else
        begin
          LEditRegKey.Text := s;
          TcpClient.Sendln('SUCCESS|' + LEditKey.Text);
          s := TcpClient.Receiveln();
        end
    end
  else
    MessageBox(Handle, 'Сервер не найден!', 'Error', 16);
end;

сколько б я ни пыталась отправить сообщение серверу, TcpClient.Connected всегда True

Это сообщение отредактировал(а) lubja - 26.8.2008, 12:41
PM MAIL   Вверх
lubja
Дата 1.9.2008, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 26.8.2008
Где: Ростов-на-Дону

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



спасибо всем за помощь. все работает! smile

Это сообщение отредактировал(а) lubja - 1.9.2008, 10:57
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

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

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

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

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

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


 




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


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

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