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

Вниз

работа в блокированном режиме   Найти похожие ветки 

 
redlord   (2005-03-21 16:14) [0]

всем привет
народ подскажите
что я зделал не так у меня в процедуре ClientExecute
команда beep выполняется даже после того как
клиент принудительно разорвал соединение
(как будто ClientSocket.Connected всегда верно )
(сервер работает в блокированном режиме)
type
 TMyServerThread = class(TServerClientThread)
    procedure ClientExecute; override;
  end;
...

procedure TForm1.ServerSocket1GetThread(Sender: TObject;....);
begin
SocketThread := TMyServerThread.Create(True,ClientSocket);
SocketThread.Priority:=TPlowest;
SocketThread.FreeOnTerminate:=true;
SocketThread.Resume;
end;
....
procedure TMyServerThread.ClientExecute;
var
MySocket: TWinSocketStream;
begin
MySocket := TWinSocketStream.Create(ClientSocket, 1000);
   while (Terminated=false) and ClientSocket.Connected do
   beep;
  MySocket.Free;
  ClientSocket.Close;
end;


 
Reindeer Moss Eater ©   (2005-03-21 16:25) [1]

Если был вызван Execute, значит был коннект.
Значит по крайней мере один раз оно бипнет.
И что странного?


 
Digitman ©   (2005-03-21 18:01) [2]


> у меня в процедуре ClientExecute
> команда beep выполняется даже после того как
> клиент принудительно разорвал соединение


ты свой beep в цикле молотишь - что ж тут удивительного ?

и св-во ClientSocket.Connected отнюдь НЕ отражает факт "разорванности" соединения.

установи его в False - получишь то что желаешь.


 
RedLord   (2005-03-22 11:34) [3]

если ClientSocket.Connected не отображает отсутствие соединения то по какому свойству его проверять ? веть сервак в блокированном режиме запущен и событие дисконнект от него не дождешся

(тока палками сильно не бейте)


 
Polevi ©   (2005-03-22 11:41) [4]

по результату send recv ф-ий


 
redlord   (2005-03-22 14:02) [5]

после добавления кода (вместо бипера)
  while (Terminated=false) and (ClientSocket.Connected) do  //
 if MySocket.WaitForData(500) then  
    begin
    n:= mysocket.read(resivdata[1],3);
      if n = 0  then   break else
       begin
         synchronize(sunc)
       end;
    end;  
   end;  
finally
  MySocket.Free;
  ClientSocket.Close;
end;

закрытие  клиента отслеживаются но теперь разрыв соединения со стороны сервера стал приводить к ошибке(esocket error  read error 6 неверный дискриптор)


 
Digitman ©   (2005-03-22 15:05) [6]


> со стороны сервера


после установления коннекта нет ни сервера ни клиента
есть "передатчик" и есть "приемник" .. в каждый момент времени ..


> ошибке(esocket error  read error 6 неверный дискриптор)


на какой строчке ?


 
redlord   (2005-03-22 18:43) [7]

n:= mysocket.read(resivdata[1],3);


 
Eraser ©   (2005-03-22 21:18) [8]

redlord

Что за переменная resivdata?


 
Digitman ©   (2005-03-23 08:16) [9]


> redlord   (22.03.05 18:43) [7]


что за mysocket ?


 
redlord   (2005-03-23 10:47) [10]

to digitman
 MySocket := TWinSocketStream.Create(ClientSocket, 1000);
to eraser
 resivdata:string;
 setlength(resivdata,1024)


 
Eraser ©   (2005-03-23 16:04) [11]

Используй лучше PChar для этих целей... а если передаются не только текстовые строки, то вообще TMemoryStream использовать надо.



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

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

Наверх




Память: 0.46 MB
Время: 0.014 c
1-1116594321
Erik1
2005-05-20 17:05
2005.06.06
Как учесть выравнивание в записи при переносе даных?


1-1116509769
Object
2005-05-19 17:36
2005.06.06
Как найти запись в XML без аттрибутов?


3-1113470194
yk
2005-04-14 13:16
2005.06.06
очень медленно работает запрос....


5-1086026239
klyonov
2004-05-31 21:57
2005.06.06
Мерцание, будь оно неладно!


1-1116560429
A
2005-05-20 07:40
2005.06.06
.lib + 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
Английский Французский Немецкий Итальянский Португальский Русский Испанский