Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.06.20;
Скачать: CL | DM;

Вниз

TServerSocket, TClientSocket. Синхронный и асинхронный, блокирующ   Найти похожие ветки 

 
Digitman ©   (2004-04-25 15:01) [40]


> так чтоб при этом сервер не стал виснуть


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

ну если неважно и код ты не намерен приводить, тогда остаются два варианта - либо попрыгать с бубном вокруг своего сервера либо перечитать документацию и вникнуть, что, где, как и для чего у тебя происходит, в соответствии ли с документацией или "от балды"..


 
Yermek   (2004-04-25 15:55) [41]

кажется мы не не поняли друг друга (или я непонял)
код я приводил чтоб спросить может ли несколько одновременно подключившихся клиентов, одновременно обращатся к одной процедуре, вернее не клиентов а процедура ClientExceture.

а код программы:
begin
 inherited FreeOnTerminate := TRUE;
 While Not Terminated And ClientSocket.Connected Do
 try
   fSocketStream := TWinSocketStream.Create( ClientSocket, 60000 );
   try
     while ( not Terminated ) and ( ClientSocket.Connected ) do
       try
         cl_text :=ClientSocket.ReceiveText;
         cl_ip :=ClientSocket.RemoteAddress;
         cl_host :=ClientSocket.RemoteHost;
         ac:=fmMain.ServerSocket1.Socket.ActiveConnections;
   
         if (copy(cl_text,1,3)="001") or
            (copy(cl_text,1,3)="002") or
            (copy(cl_text,1,3)="003") or
            (copy(cl_text,1,3)="004") or
            (copy(cl_text,1,3)="005") or
            (copy(cl_text,1,3)="end") then
           begin
             if (copy(cl_text,1,3)="001") then
               begin
                 ...
                 fmMain.SentFile(copy(cl_text,5,length(cl_text)-4),nomer);
                 //Exit;
               end;
             if (copy(cl_text,1,3)="002") then
               begin
                 fmMain.mJournal.Lines.Add(cl_host + #9 + cl_ip + #9 + "Ñòóäåíò çàêîí÷èë òåñòèðîâàíèå íà êîìïüþòåðå");
                 ...
                 fmMain.SetResult(cl_host,fn,n,ln,pr,cb,qtest);
               end;
             if copy(cl_text,1,3)="004" then
               begin
                 ...
                 fmMain.SetTime(cl_ip,copy(cl_text,5,length(cl_text)-4));
               end; //
           end;//
       except
         on e:exception do
         begin
           ClientSocket.Close;
           Terminate;
         end;
       end;
   finally
     fSocketStream.Free;
   end;
 except
   on e:exception do
   begin
     ClientSocket.Close;
     Terminate;
   end;
 end;
end;


немного я вырезал, а то код большой
и кстати я слышал что там(ClientExceture) недолжно быть много операций, а у меня их достаточно, как быть?

в пропущенных местах вычисляются входящие в процедуры SentFile SetResult SentFile и я не закрываю клиентский сокет если это важно

и как насчет
> так чтоб при этом сервер не стал виснуть :)


 
Digitman ©   (2004-04-26 08:17) [42]

ой каша-а-а-а !

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

ну да ладно, начнем с начала ..


> inherited FreeOnTerminate := TRUE;


это зачем ? почему inherited ?


> fSocketStream := TWinSocketStream.Create( ClientSocket,
> 60000 );


это зачем ? где и как используешь ?


 
Fantasist ©   (2004-04-27 03:16) [43]


> Digitman ©   (23.04.04 08:58) [19]
>
> вникни в [3]
> как раз об этом я там и сказал
> в чем же расхождение ?


 Расхождение в [1], а не в [3] (а как следствие, небольшое расхождение между [1] и [3]). Я ничуть не сомневаюсь, что ты отлично представляешь предмет о котором говоришь, однако те, кому этот предмет мало знаком могут не суметь скомпилировать твои постинги в одну концепцию. Таким образом может возникнуть недопонимание вследствии слегка непоследовательного изложения. Я просто помню это на своем опыте, как подобные объяснения могут запутывать. Надо сказать, что хорошо объяснить задача весьма непростая и чаще всего все-таки приходилось сталкиваться с не очень понятными изложениями материала.


> а какая разница, WinSock API или не WinSock API ? оболочка
> (в виде упомянутых компонентов) или не оболочка ? Суть от
> этого не меняется.


 Суть не меняется - меняется способ подачи данной сути, а это весьма существенно. Увидеть суть чуть ли не основная задача понимания и для достижения этой цели приходиться тратить немало времени. Так просто она не видиться. В данном случае опять же на своем опыте - с сокетами я начал как раз с TClient/ServerSocket и никак не мог их понять. Зачем nonBlocking и ThreadBlocking mode? Что за поток и где он блокирует? Почему при ThreadBlocking создается еще один поток (чтобы его блокировать что ли, а зачем)?
В чем выгода того или иного подхода. Почему говоря про сокеты упоминается "асинхронные" и "блокирующие", но редко "синхронные" и "неблокирующие"? Много таких непонято было, пока я смотрел на эти Дельфийские оболочки. Потом понял, что так я никуда не уеду, и стал смотреть сорс и читать help по Socket API. Только после этого я все понял. Ну в общем, Socket API ближе к сути и эту суть легче познать не нем, и уж после этого распространить дальше (возможно и дальше сокетов). Таков мой личный опыт.


 
Polevi ©   (2004-04-27 08:15) [44]

> [43] Fantasist ©   (27.04.04 03:16)
причем тут сокеты вообще, ты еще предложи событийное взаимодействие с операциооной системой начать зучать с WSAAsyncSelect


 
Fantasist ©   (2004-04-27 21:00) [45]


> причем тут сокеты вообще


 Читаем название темы и первый пост автора.


> предложи событийное взаимодействие с операциооной системой
> начать зучать с WSAAsyncSelect


 Может мне еще предложить гланды через известное место удалять? Я не понимаю, чем вызвана такая резкость с Вашей стороны. Я высказал свое мнение по теме и если Вас что-то не устраивает, могли бы на эту указать. А дураками друг друга обзывать весьма не констуктивно.


 
Polevi ©   (2004-04-27 21:31) [46]

>А дураками друг друга обзывать весьма не констуктивно.
поддерживаю



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

Текущий архив: 2004.06.20;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.026 c
6-1083243303
Koba
2004-04-29 16:55
2004.06.20
Содержимое каталога


14-1086242126
Layner
2004-06-03 09:55
2004.06.20
Активизация Win2003, через прокси можно ли активизировать?


3-1085749710
Andrey
2004-05-28 17:08
2004.06.20
Использование cdx в Delphi


14-1086023117
Knight
2004-05-31 21:05
2004.06.20
Почему в играх компьютерные напарники такие тупые?


1-1086338449
r9000
2004-06-04 12:40
2004.06.20
Добавление компонентов CheckBox в столбец ListView