Форум: "Сети";
Текущий архив: 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.015 c