![]() |
|
Модераторы: Snowy, Poseidon, MetalFan |
![]()
|
|
| lubja |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 26.8.2008 Где: Ростов-на-Дону Репутация: нет Всего: нет |
пишу простой чат, типа сервер-клиент. клиентом у меня является регистратор. работает это так: регистратор отсылает сообщение серверу, тот отсылает ему что-то, регистратор, получив ответ, тут же отвечает, что "все нормуль, получил". будем это называть сессией. вроде все работает, но! проблема в том, что может происходить только одна сессия! если регистратор пытается тут же отправить еще одно сообщение серверу, то оно уже не доходит до него (смотрела по отладчику: в последующих сессиях на сервере не срабатывает OnAccept).
вот код этой процедуры (может я что-то не так делаю... 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; помогите кто, чем может! плиз!!! |
|||
|
||||
| SneG0K |
|
|||
|
Max Mara ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1887 Регистрация: 1.12.2007 Где: Wis Dells Репутация: 2 Всего: 54 |
Ну как бы не TTcpServer а просто TcpServer. Потом еще как бы надо использовать кнопочку код...
Теперь по сути, вроде в коде все в порядке... Выложи код клиента... Уверена, что клиент отсылает второй раз? Добавлено через 40 секунд Попробуй динамически создавать TCpServer |
|||
|
||||
| lubja |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 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 |
|||
|
||||
| lubja |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 26.8.2008 Где: Ростов-на-Дону Репутация: нет Всего: нет |
спасибо всем за помощь. все работает!
Это сообщение отредактировал(а) lubja - 1.9.2008, 10:57 |
|||
|
||||
![]()
|
| Правила форума "Delphi: Сети" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делится вскрытыми компонентами
Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Сети | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |