Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2005.03.27;
Скачать: [xml.tar.bz2];

Вниз

TServerSocket   Найти похожие ветки 

 
Наф   (2005-01-27 12:11) [0]

Создаю приложение с Server:TServerSocket
1. Делаю Server.ServerType:=stNonBlocking
2. Наследую класс TServerClientThread
TServerThread=class(TServerClientThread)
public
procedure ClientExecute; override;
end;

Для начала пишу в ClientExecute следующий код:
procedure TServerThread.ClientExecute;
begin
 while (not Terminated) and ClientSocket.Connected do
 begin
   //пока ничего
 end;
end;

3. В событии OnGetThread пишу:
procedure TDataModule2.ServerGetThread(Sender: TObject;
 ClientSocket: TServerClientWinSocket;
 var SocketThread: TServerClientThread);
begin
SocketThread:=TServerThread.Create(true,ClientSocket);
SocketThread.FreeOnTerminate:=true;
SocketThread.Priority:=tpLower;
SocketThread.Resume;
end;

4. Запускаю сервер, Server.Open при создании формы
В диспечере задач появляется 2 потока, почему? один поток неявно создается неявно самим Server:TServerSocket?
5. Запускаю клиента. Появляется еще один поток (всего 3) - нормально по-моему. Отключаю клиента, поток не уходит. Почему?
Снова запускаю - всеравно 3 потока. Запускаю еще одного - теперь их 4. Отключаю обоих - попрежнему 4.
Если  код поменять на
procedure TServerThread.ClientExecute;
var
Stream:TWinSocketStream;
s:string;
begin
 Stream:=TWinSocketStream.Create(ClientSocket,10000);
 s:="*";
 while (not Terminated) and ClientSocket.Connected do
 begin
  Stream.Write(s,1);
 end;
end;

то клиент "забивается звездочками" - нормально, но если клиент отключается, то на сервере ошибка "Устройство не опознает команду". Как бороться?
Заранее спасибо.


 
Polevi ©   (2005-01-27 12:30) [1]

посмотри TServerClientThread::Execute


 
Digitman ©   (2005-01-27 13:02) [2]


> SocketThread.FreeOnTerminate:=true;


это убери.


> В диспечере задач появляется 2 потока, почему?


один - основной, другой - AcceptThread


 
Digitman ©   (2005-01-27 13:13) [3]

так, стоп ..

в режиме stNonBlocking событие OnGetThread НЕ возбуждается вообще.


 
Наф   (2005-01-27 13:45) [4]

Digitman: ошибка, конечно Server.ServerType:=stThreadBlocking


 
Digitman ©   (2005-01-27 14:15) [5]


> Наф   (27.01.05 13:45) [4]


тогда список трэдов процесса, который ты видишь, состоит из:

- основного трэда процесса: он ВСЕГДА создается и существует вплоть до завершения процесса

- трэда, созданного классом TServerAcceptThread : этот трэд создается при активации TServerSocket и занят только тем что "слушает" вх.запросы на соединение клиентов с сервером, при успешном акцепте создает новое гнездо и стартует (либо берет из кэша свободных) транспортный трэд для обслуживания вновь созданного тр.канала с клиентом

- транспортных трэдов : по одному на каждое соединение с отдельным клиентом


 
Smithson   (2005-01-27 14:33) [6]

Причем эти последние при отвале клиента не убиваються, а переводятся в режим ожидания. И только если новых коннектов нет продолжительное время, то они завершаются. По-моему, так.


 
Digitman ©   (2005-01-27 16:13) [7]


> Smithson   (27.01.05 14:33) [6]


> По-моему, так


нет, не так.



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2005.03.27;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.041 c
1-1110976205
Sanich
2005-03-16 15:30
2005.03.27
Как экспортировать отчет из QuickReport.


1-1110828527
Гость
2005-03-14 22:28
2005.03.27
Подскажите, как вставить данные из формы в Word?


11-1093386026
Ripper
2004-08-25 02:20
2005.03.27
Событие TreeView


8-1102816081
I m A
2004-12-12 04:48
2005.03.27
Пунктирная линия


1-1111039806
OlegM
2005-03-17 09:10
2005.03.27
Помогите код из VBA для Excel перевети на Delphi





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский