Главная страница
    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.038 c
1-1110435494
boalse
2005-03-10 09:18
2005.03.27
Массив больше 1 Мб???


1-1110786259
x_shura
2005-03-14 10:44
2005.03.27
Ошибка отрисовки Virtual TreeView


1-1110880929
C@N
2005-03-15 13:02
2005.03.27
мож кто знает как можно ЗДЕЛАТЬ обои в ListView


9-1104660454
Vaitek
2005-01-02 13:07
2005.03.27
Не совсем игра, но трехмерная графика...


9-1105174307
LordX
2005-01-08 11:51
2005.03.27
GLScene - ошибка в демке ODE Buggy





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский