Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

TspClient и TspServever [D7, XP]


Страницы:   1 2 3 4 5 6 7 8

kostyl_kostyl ©   (2009-08-12 12:38:00) 

Добрый день. Прошу показать пример обмена сообщениями сервера и клиента с помощью этих компонентов. У меня не выходит.
Я пишу:

procedure TForm1.TcpServer1Accept(Sender: TObject;
 ClientSocket: TCustomIpClient);
begin
 TcpServer1.Sendln('Ответ');
end;
//-----
 if TcpClient.Connect then
 begin
   TcpClient.Sendln('Запрос');
   Response := TcpClient.Receiveln;
   ShowMessage(Response);
 end
 else
   ShowMessage('Нет ответа');
 TcpClient.Disconnect;    

В лучшем случае  выдает пустую строку. В худшем зависает на Response := TcpClient.Receiveln;. Помогите разобраться.
Заранее благодарю.


Сергей М.   (2009-08-14 12:24:00) [41]


> Хочешь, как напишу и оформлю отпишу на мыло?


Не хочу)
Ты лучше сюда отпишись - не одному мне любопытно)


> Почему в режиме noBlocking клиент возвращает
> connect = false?
>


Потому что в неблок.режиме операция коннекта является асинхронной : вызов метода Connect запускает эту операцию и немедленно возвращает управление. О фактическом завершении операции (успешном или неуспешном) станет известно позже.


kostyl_kostyl   (2009-08-14 11:59:00) [42]


> Ну поделись уж, не томи, кому и на что намерен "раскрывать"
> ?)

Я еще не написал. Только начал. Хочешь, как напишу и оформлю отпишу на мыло?
А, пока есть вопрос? Почему в режиме noBlocking клиент возвращает
connect = false?


Сергей М.   (2009-08-14 11:33:00) [43]


> призыв к "раскрытию глаз"


Ну поделись уж, не томи, кому и на что намерен "раскрывать" ?)


kostyl_kostyl   (2009-08-14 10:19:00) [44]

Нет, призыв к "раскрытию глаз"


Сергей М.   (2009-08-14 09:01:00) [45]


> пошел писать статью в блоге


Порочащую "честь и достоинство" Делфи ?)


kostyl_kostyl   (2009-08-14 00:45:00) [46]

Да, я именно так и хотел это назвать - разврат. Всё, пошел писать статью в блоге...


Сергей М.   (2009-08-13 21:38:00) [47]


> Anatoly Podgoretsky ©   (13.08.09 21:30) [107]


Ну тебе-то ведь хорошо известно, откуда растут ноги у дельфийского разврата)

Лозунг "Делфи раньше чем горошок" культивировался и культивируется и по сей день .. всякого рода архангельскими и иже с ними)


Сергей М.   (2009-08-13 21:32:00) [48]


> kostyl_kostyl   (13.08.09 21:28) [106]


> PHP действительно очень опасный язык в плане тенденции "общего"
> заблуждения по поводу его простоты


Строго говоря, тоже самое можно сказать и о Делфи.
Но выбор так или иначе за тобой)


Anatoly Podgoretsky   (2009-08-13 21:30:00) [49]

> Сергей М.  (13.08.2009 21:11:45)  [105]

Дельфи не хуже развращает.


kostyl_kostyl   (2009-08-13 21:28:00) [50]

Не хочется конечно разводить тут холивар, но PHP действительно очень опасный язык в плане тенденции "общего" заблуждения по поводу его простоты. Динамическая типизация, тесная связь с окружением и основы UNIX должны все время быть в кеше мозга, чего естественно многие новички да и старички не делают. Жаль, что я уже не застал время С/С++. Высокоуровневость упрощает жизнь, но ограничивает развитие. То же самое могу сказать и о Delphi. Репид девелопмент оболочка заставляет начинающего думать о Delphi также, как и о PHP, разве что не в такой степени. Но ведь она такая совсем не для этого. Ладно. Спасибо большое всем за подсказки.


Сергей М.   (2009-08-13 21:11:00) [51]


> Это всё PHP блин
</>

Эт точно)

РНР - сплошной разврат, тотальное оболванивание и без того неокрепших умов)

Можно сказать - инструмент, позволяющий пирожнику, мало что смыслящему в сапогах, тачать эти самые сапоги не хуже сапожника)


kostyl_kostyl   (2009-08-13 21:06:00) [52]

Да, я совсем, аж стыдно стало, не понимал, да и сейчас особо не вкурю, что есть очень большая разница между последовательностью строк в коде, разделения его в отдельных модулях и действительной последовательности исполнения строк кода. Это всё PHP блин....


Сергей М.   (2009-08-13 20:21:00) [53]


> kostyl_kostyl   (13.08.09 18:59) [100]


Смотря что считать стоками.
Если строки искл-но твоегокода, то да - ты не улавливаешь.


Сергей М.   (2009-08-13 20:07:00) [54]


> Anatoly Podgoretsky ©   (13.08.09 20:00) [101]
> Неверно, это тупой блокирующий режим


Вообще-то мы тут уже с [93] поста про неблок.режим долдоним


Anatoly Podgoretsky   (2009-08-13 20:00:00) [55]

Неверно, это тупой блокирующий режим, удобен для последовательного выполнения команд, расплата блокирование потока.

Событийный (родной для Делфьи и Виндоус) когда управление передается соответствующему обрабчику при возникновение события. Порядок выполнения не определен, поток не блокируется, в состоянии обрабатывать до нескольких десятков тысяц соединений одновнеменно в одном потоке. Расплата более сложная нелинейная логика. Обычно требует построения машины состояний, что бы организовать последовательность выполнения, для распознования в каком состоянии находится соединение.


kostyl_kostyl   (2009-08-13 18:59:00) [56]

Как вы думаете, наверно я думаю что не успеет потому что не сильно улавливаю вообще суть событийного подхода и думаю что каждая следующая строка строго идет за предыдущей и ничего в этот момент больше не может выполняться? Верно?


Сергей М.   (2009-08-13 18:40:00) [57]

Угу.
Даже из собственных штанов за это время успеешь выпрыгнуть)


kostyl_kostyl   (2009-08-13 18:04:00) [58]

И что если вайл будет, например,  четыре минуты крутиться, то я смогу нажимать кнопки и делать чё захочу? Даже опять в это место смогу прийти?


Сергей М.   (2009-08-13 16:10:00) [59]

В обработчике OnTimer:

Timer.Enabled := False;
TimedOut := True;

В обработчике OnError:

if SocketError <> WSAEWOULDBLOCK then
 TTCPClient(Sender).Disconnect;


...
TCPClient.SendLn('Запрос к серверу');
Timer.Interval := 10000;
TimedOut := False;
Timer.Enabled := True;
ServerResponse := '';
while TCPClient.Connected and not TimedOut and (ServerResponse <> ')' do begin
ServerResponse := TCPClient.ReceveLn;
Application.ProcessMessages;  // обработка потенциальных GUI-событий  
end;
Timer.Enabled := False;
if TimedOut then
 ShowMessage('Прошло 10 минут, но ответ сервера в ожидаемом виде не получен')
else
 ShowMessage('Получен ответ сервера :'#10 + ServerResponse);


Anatoly Podgoretsky   (2009-08-13 16:06:00) [60]

> Сергей М.  (13.08.2009 15:43:34)  [94]

При том с диким количеством соединений.


Страницы:   1 2 3 4 5 6 7 8

Наверх

Титульная страница Поиск, карта сайта Написать письмо