![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TspClient и TspServever [D7, XP]
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]
При том с диким количеством соединений.