TClientSocket - вопрос

Mandarin
Дата: 01.06.2009 15:18:46
Всем привет!

народ подскажите где грабли....
задача простая - отправить текст из одного приложения в другое по сети

вводная...
есть прога которая принемает сообщения в которой есть соответственно TServerSocket
и есть прога которая отправляет сообщение в которой есть TClientSocket
в клиентской проге одна кнопка с кодом
код "под кнопкой"
...
CS1:TClientSocket
...
CS1.Close; //закрываем соединение
CS1.Open; //открываем соединение
//если подключен отправляем сообщение
if cs1.Active then CS1.Socket.SendText('Калямаля');

загвостка в том что CS1.Active становиться true и событие onConnect произходит только после завершения процедуры "под кнопкой". по сути проблему можно решить так - разделить процедуры подключения и отправки текста, но это не удобно хочеться чтобы было все под одной кнопкой типа подключился отправил сообщение, отключился.

есть кие-нибудь мысли по этому поводу ?
misha mike
Дата: 01.06.2009 16:12:58
Можно подождать:
CS1.Open;
while not CS1.Active do 
  begin
    Sleep(10);
    Application.ProcessMessages;
  end;
Но этот простейший пример не учитывает случая неудачного подключения, он просто завесится. Чтобы этого не произошло, нужно проверять в условии цикла еще одну переменную, которая устанавливается в обработчике ошибки подключения. А вообще разделить процедуры подключения и отправки текста есть самое правильное решение.

P.S. Ох порежется ваша строка при доставке на удаленную сторону!
Mandarin
Дата: 01.06.2009 16:17:04
misha mike,

кстати по поводу порезки строки... какие меры принемаются чтоб строка отправленная принемалась целиком ? :)
misha mike
Дата: 01.06.2009 16:20:53
Mandarin
кстати по поводу порезки строки... какие меры принемаются чтоб строка отправленная принемалась целиком ? :)

Реализация собственного прикладного протокола, или же использование готовых компонетов, реализующих один из стандартных протоколов, например IRC.
Mandarin
Дата: 01.06.2009 16:25:20
misha mike,

понятно, спасибо за помощь вариант с ожиданием соединения подходит :)