![]() |
| ||
|
|
Новости |
Поиск |
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-12 15:15:00) [121]
> склоняюсь к мнению что регистр проца
Интересно, на чем основано такое мнение ?
Вероятно на том что в проце якобы есть какие-то там "регистры" какого-то там невероятно большого размера ?)
kostyl_kostyl (2009-08-12 15:03:00) [122]
> А как думаешь, что из себя есть ClientSocket.Receiveln?
Пока склоняюсь к мнению что регистр проца. А вообще без понятия.
Сергей М. (2009-08-12 15:01:00) [123]
> уже в ClientSocket.Receiveln ничего не будет?
>
Да.
Все что на момент этого вызова находилось во внутреннем буфере принимаемых данных, ты этим вызовом оттуда вычерпал. И если нигде не сохранил, то навсегда потерял.
Dennis I. Komarov (2009-08-12 14:51:00) [124]А как думаешь, что из себя есть ClientSocket.Receiveln?
kostyl_kostyl (2009-08-12 14:49:00) [125]Когда я делаю там if ClientSocket.Receiveln <> '' и условие выполняется у меня уже в ClientSocket.Receiveln ничего не будет?
Dennis I. Komarov (2009-08-12 14:46:00) [126]
> А.., типа Get чистит буфер?
Кто, где, кого чистит?
kostyl_kostyl (2009-08-12 14:36:00) [127]
> Dennis I. Komarov © (12.08.09 14:32) [28]
А.., типа Get чистит буфер?
Dennis I. Komarov (2009-08-12 14:32:00) [128]
> И что делать то? Как правильно?
Очевидно, что перед тем как сравнивать, надо сохранить куда-нить полученное...
Сергей М. (2009-08-12 14:29:00) [129]
> Десяток
Десяток - это курам на смех.
Серьезные проблемы возникнут при тысяче-другой клиентов.
kostyl_kostyl (2009-08-12 14:25:00) [130]
> Сколько конкретно ?)
Десяток. Это я сказал, указывая что не один.
> Вот сдесь, все что получил твой сервер кануло в небытие
И что делать то? Как правильно?
Сергей М. (2009-08-12 14:16:00) [131]
> У меня же клиентов много
Сколько конкретно ?)
Сергей М. (2009-08-12 14:15:00) [132]
> Аргументы?
В режиме bmThreadBlocking сервер работает с каждым из клиентов в отдельном доп.потоке.
"Зависание" одного из обслуживающих доп.потоков не влияет на работоспособность прочик доп.потоков и, соотв-но, на успешное обслуживание прочих клиентов.
Palladin (2009-08-12 14:12:00) [133]
> [17] Сергей М. © (12.08.09 13:43)
ну тык он(сервер) посылает, то в OnAccept, а клиент то еще даже не в курсе что соединение установилось... куда там чего прийдет на клиенте...
Dennis I. Komarov (2009-08-12 14:12:00) [134]
> if ClientSocket.Receiveln <> '' then
Вот сдесь, все что получил твой сервер кануло в небытие, или ему не важно что какой-то клиент там чего-то прислал?
> Аргументы? У меня же клиентов много. Могут не достучаться
> наверно ж?
А какие нужны? Напиши и посмотри если не веришь...
kostyl_kostyl (2009-08-12 13:50:00) [135]
> Не повесишь.
Аргументы? У меня же клиентов много. Могут не достучаться наверно ж?
Сергей М. (2009-08-12 13:47:00) [136]
> писал туда ShowMessage
Нельзятуда писать ShowMessage при BlockMode = bmThreadblocking !
Сергей М. (2009-08-12 13:46:00) [137]
> я вайлом не повешу сервер?
Не повесишь.
kostyl_kostyl (2009-08-12 13:44:00) [138]
> пока на сервере не отработает OnAccept
Кстати да. Я это заметил когда писал туда ShowMessage...
Сергей М. (2009-08-12 13:43:00) [139]
> Palladin © (12.08.09 13:41) [16]
А.. ну да ..
Ну дык а какое дело серверу до событий на стороне клиента ?
Palladin (2009-08-12 13:41:00) [140]
> [14] Сергей М. © (12.08.09 13:38)
туда, это описание события TTCPServer.OnAccept, последнее предложение, и гласит оно, на сколько я понял, о том что соедиенение у клиента не установится пока на сервере не отработает OnAccept