![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
процедура OnAccept в компоненте TTcpServer [D7, WinXP]
SergeyDon © (2005-07-27 12:14:00){TTcpServer.BlockMode=bmThreadBlocking;}
procedure T___.TcpServer1Accept(sender: TObject;
ClientSocket: TCustomIpClient);
begin
\\идентифицировал клиента
str:=ClientSocket.LookupHostName(ClientSocket.RemoteHost) +
' (' + ClientSocket.RemoteHost + ')';
Logs.Add('Incoming connection: '+str);
\\получил данные
ClientSocket.ReceiveBuf(r_bufsize,1);
ClientSocket.ReceiveBuf(r_buf[0],r_bufsize);
... \\создал поток для обработке данных
{клиент связь не рвет}
end;
вопросы:
1. Если клиент посылает ещё пакет данных почему OnAccept не вызывается?
2. Где и как отправить ответ клиенту после обработки данных?
3. При подключении клиента TTcpServer создаёт отдельный поток для обработки OnAccept?
4. Как использовать OnGetThread и OnListening?
Fay (2005-07-29 16:39:00) [1]2 SergeyDon (29.07.05 16:22) [10]
Проверь почту. Я модуль отправил, который мы щяз используем. Вполне себе читаемый, часть кода вАщЕ стырена из Sockets 8).
SergeyDon (2005-07-29 16:22:00) [2]to Fay
1) TcpServer.BlocMode = bmThreadBlocking
2) неочень понял вопрос.
Задача организовать обмен данными с удаленными клиентами.
клиенты подключаются к локальной сети (например через модем)/или уже включены в локальную сеть где работает сервер.
ответ сервера клиенту зависит от времени, типа запроса и др. факторов.
Раньше это реализовывалось используя TServerSocket и TClientSocket (все работало, работает и устраивает), но вот настал момент когда любопытство взяло своё. На форуме все пытаются использовать TcpServer & TcpClient вот и начали переписывать приложение.
Паралельно поставили задачу сделать доступ к информации через
Web -интерфейс но это пока я даже ещё не представляю как.
Fay (2005-07-29 15:49:00) [3]2 SergeyDon (29.07.05 15:20) [8]
1) Сокеты блокирующие?
2) Тебе критично использовать TTcpServer?
SergeyDon (2005-07-29 15:20:00) [4]да броня крепка :)
ctrl+f1 не помогло :(
кто может разясните как обмениваться данными в обоих направлениях с подключившимеся клиентами? (используя TTcpServer и TTcpclient)
может кто подскажет больше по событию OnGetThread
чем
A wrapper for the TServerSocketThread event of the same name.
Digitman (2005-07-27 17:15:00) [5]
> имею указатель на ClientSocketThread равный Nil
и правильно имеешь.
по возврату из твоего обработчика код сервера проанализирует, nil ли ты вернул, и если nil - сервер создаст (или возьмет из пула) тред на базе предусмотренного им класса с предусмотренной им же же по дифолту функц-тью созданного им треда
SergeyDon (2005-07-27 15:40:00) [6]да походу TcpServer1GetThread вызывается до OnAccept
SergeyDon (2005-07-27 15:14:00) [7]при вызове TcpServer1GetThread имею указатель на ClientSocketThread равный Nil
SergeyDon (2005-07-27 14:54:00) [8]to Digitman: если можно для тех кто в танке
в событии OnAccept я получаю ClientSocket:TCustomIpClient по которому могу идентифицировать клиента.
а в событии T___.TcpServer1GetThread имею указатель на ClientSocketThread: TClientSocketThread
как с ним работать что то по Help`у не очень понятно куда и когда обращаться для вычитки/отправки данных?
события OnRead наверное имеллось в виду OnReceive - через инспектор недоступно, но есть возможность описать TcpServer1.OnReceive:=...
вопрос остался открым: как обмениваться данными с подключившимеся клиентами? (используя TTcpServer и TTcpclient)
Digitman (2005-07-27 12:37:00) [9]
> 1. Если клиент посылает ещё пакет данных почему OnAccept
> не вызывается?
с какого перепугу OnAccept должен вызываться при этом ?
данное событие лишь фиксирует факт успешное акцептирование клиентского запроса на соединение с сервером .. соединение же происходит однократно!
см. события OnRead like
kblc (2005-07-27 12:29:00) [10]Конференция называеться WinAPI .. так ты и пеши на АПИ... тогда и помогут.. ;)
kblc (2005-07-27 12:23:00) [11]а ты Ctrl+F1 не нажимал?