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

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

процедура 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 не нажимал?


Наверх

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