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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TcpClient, Команда отправляется только после ... 
:(
    Опции темы
iddqd
Дата 14.7.2006, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 16.11.2005

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



 ... закрытия соединения.
Т.е. код примерно такой:
Код

procedure TForm18.Button1Click(Sender: TObject);
begin
TcpClient1.Connect;
TcpClient1.Sendln('hello moto', '');
TcpClient1.Disconnect;
end;

В данном случае команда выполнится корректно, но сервер конечно же не успеет ничего ответить, потому-что соединение будет сразу закрыто.
А если делать
Код

TcpClient1.Disconnect;

По нажатию на другую кнопку, а в первом коде закоментить, то до тех пор, пока не произойдёт отключение команда не отправится smile
Мне необходимо, чтоб соединение держалось постоянно и шел обмен командами.
Может есть какой нибудь метод у TcpClient для того, чтобы отправить команду немедленно? 


--------------------
PM MAIL   Вверх
Snowy
Дата 14.7.2006, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

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



TcpClient1.Sendln('hello moto');

Добавлено @ 15:15 
Отправляется она немедленно.
Просто сервер читает строку, а ты не отправил завершение строки.
Поэтому сервер и не реагирует, пока не придёт конец строки или дисконнект.
Просто убрать второй параметр и конец строки будет отправляться, а сама строка корректно читаться. 
PM MAIL   Вверх
iddqd
Дата 14.7.2006, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 16.11.2005

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



Спасибо, Snowy как обычно ответ быстро и по существу. Мне помогло. Но теперь подобная проблема с сервером.
Код

procedure TForm18.TcpServer1Accept(Sender: TObject;
  ClientSocket: TCustomIpClient);
  var
  Line, Cmd: string;
begin
Line:=ClientSocket.Receiveln();
// обработка строки
ClientSocket.Sendln('hello moto'); //ответ клиенту
end;


А в клиенте приём организован вот так:
Код

procedure TForm18.TcpClient1Receive(Sender: TObject; Buf: PAnsiChar;
  var DataLen: Integer);
begin
ShowMessage(Buf + ' - '+IntToStr(DataLen));
end;

Но клиент не выводит никакого сообщения.

P.S. Я знаю правила. Один топик - один вопрос. Но вопросы братья родные и не имеет смысла создавать два одинаковых топика, ИМХО.
 


--------------------
PM MAIL   Вверх
Snowy
Дата 14.7.2006, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

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



Тут вариантов куча. Даже не знаю.
Может клиент забыл отправить строку серверу.
Может был дисконнект.
Да что угодно может быть.
Нужно или код посмотреть, или расставить бряки, чтобы увидеть заходит он вообще туда или нет... 
PM MAIL   Вверх
iddqd
Дата 17.7.2006, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 16.11.2005

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



Snowy, или кто-либо другой.
Вы можете написать простейший пример, где есть клиент и сервер.
Клиент отправляет команду, например, 
команда: 2
аргументы: hello и второй: moto
Сервер их принимает и если второй аргумент <> moto, то отвечает клиенту что-то. И клиент выводит сообщение о том, что неверный аргумент.
У кого есть время и кому не лень - сделайте пожалуйста, а то сил моих больше нет smile
3 дня совокупляюь с клиент-сервером.
Можно сделать хоть на IndyTCPClient\Server, хоть на просто TTCpClient\Server.
На осонове этого примера я уже смогу сделать всё, что мне надо.
Буду очень признателен.
Спасибо заранее. 


--------------------
PM MAIL   Вверх
Snowy
Дата 18.7.2006, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

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



http://vingrad.ru/DELPHI-DLP-001358
http://vingrad.ru/DELPHI-DLP-001367
Также приаттачиваю пример из IndyDemo  

Присоединённый файл ( Кол-во скачиваний: 27 )
Присоединённый файл  IdTCPDemo.zip 6,93 Kb
PM MAIL   Вверх
iddqd
Дата 18.7.2006, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 16.11.2005

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



Спасибо, но:
- эту демку я видел и на её основе всё равно не получается сделать то, что мне надо.
- она не подходит для BDS'06 


--------------------
PM MAIL   Вверх
Snowy
Дата 18.7.2006, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

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



Про 2006 не говорилось.
Но это поправимо.
Внизу этой страницы есть список "А здесь смотрели?".
Вот первый линк http://forum.vingrad.ru/index.php?showtopic=81767 тебе и нужен. 
PM MAIL   Вверх
iddqd
Дата 18.7.2006, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 16.11.2005

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



Да. Явидел этот топик, но не помогло и это.
Я ведь говорил, что перепробывал массу демок.

Видимо мне уже не что не поможет smile 


--------------------
PM MAIL   Вверх
Snowy
Дата 19.7.2006, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

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



Ну звиняйте.
10-й инди у меня щас нету.
Я на D7 пишу, а там 9-ка... 
PM MAIL   Вверх
Romikgy
Дата 19.7.2006, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



Вот демо для 10 
Код

program Intro;
{$APPTYPE CONSOLE}

uses
  IdTCPClient,
  SysUtils;

begin
  with TIdTCPClient.Create do try
    Host := 'news.atozedsoftware.com';
    Port := 119;
    Connect; try
      WriteLn('Connected.');
      WriteLn(IOHandler.ReadLn);
      IOHandler.WriteLn('Quit');
      WriteLn(IOHandler.ReadLn);
    finally Disconnect; end;
    WriteLn('Disconnected.');
  finally Free; end;
  WriteLn('Press Enter');
  ReadLn;
end.
 

Что конкретно не выходит? 


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
dumb
Дата 4.12.2006, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

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



Цитата(Flat @  4.12.2006,  17:36 Найти цитируемый пост)
почемуто не работает даже прием сервером... точнее он что то принимает но во время его выдает ошибку..

все серверные события(TCPServer.OnXXX) вызываются из потоков, созданных для каждого подключившегося клиента. посему обычная проблема взаимодействия потоков - ищи по форуму, читай. вкратце так: из методов indy-сервера НЕЛЬЗЯ напрямую взаимодействовать с формами(ShowMessage - туда же).
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

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

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

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

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

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


 




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


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

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