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

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.043 c
14-1116392273
syte_ser78
2005-05-18 08:57
2005.06.06
Вопрос к Сумчанам


14-1116368859
ALL
2005-05-18 02:27
2005.06.06
Момогите найти


1-1116443700
heady
2005-05-18 23:15
2005.06.06
текстовый файл в буфер обмена


1-1116534604
ModestGirl
2005-05-20 00:30
2005.06.06
Создать PDF


3-1115124652
saf287
2005-05-03 16:50
2005.06.06
Расширение isu и ds