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

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.55 MB
Время: 0.033 c
4-1084612229
Ярослав
2004-05-15 13:10
2004.06.20
Как программно закрыть messagebox?


14-1086202687
Cobalt
2004-06-02 22:58
2004.06.20
Кривые Безье


4-1084433187
Nebiyev
2004-05-13 11:26
2004.06.20
Как програмно включить/выключит CapsLock, NumLock?


1-1086443432
ZedeS
2004-06-05 17:50
2004.06.20
Изменение даты создания файла


3-1085497896
Elast
2004-05-25 19:11
2004.06.20
Установка FB 1.5





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