Форум: "Сети";
Текущий архив: 2006.11.12;
Скачать: [xml.tar.bz2];
Внизпередача файлов через TserverSocket TclientSocket Найти похожие ветки
← →
kolj © (2006-06-19 14:04) [0]Как передать файл по сети используя компоненти TserverSocket TclientSocket ? Дайте пожалуйста работающий пример.
← →
medved_68 © (2006-06-19 14:30) [1]Пиши на мыло кину рабочий исходник
← →
Сергей М. © (2006-06-19 14:47) [2]
> medved_68 © (19.06.06 14:30) [1]
Не облажайся)
← →
novill © (2006-06-19 17:06) [3]
> medved_68
а почему скрываешь? или он больше 8 кб?
← →
Verg © (2006-06-19 23:39) [4]http://webfile.ru/996438
← →
medved_68 © (2006-06-20 13:32) [5]U>Сергей М.<
Постараюсь твоими молитвами облажаться на все воля Windows
← →
Сергей М. © (2006-06-20 13:42) [6]
> на все воля Windows
При чем тут Windows ?
Я наблюдал фрагменты твоих прогр.текстов, где ты используешь Send-методы этих компонентов (в non-blocking-режимах) как процедуры, а не как функции. Это и будет причина лажи, когда твой код будет работать в условиях интерсети.
← →
medved_68 © (2006-06-20 17:46) [7]
> Сергей М.
Так это же для "наблюдателей". А что бы чики-чики, надо еще над моим кодом и мозгой пошевелить, ведь пример то работает, а там как тебе надо так и делай....
> При чем тут Windows ?
По типу: "С нами бог и Андреевский флаг".
С уважением .....
P.S. Кстати подскажи насчет TServerClientThread толковую инфу или простенький исходник, ну не разрушается он у меня толково.....
← →
Сергей М. © (2006-06-21 09:01) [8]
> насчет TServerClientThread .. не разрушается он у меня толково
А его не надо разрушать явно ... За это отвечает TServerWinSocket
← →
medved_68 © (2006-06-21 13:59) [9]
> Сергей М.
В том то и дело что я и не пытаюсь его разрушить!!!! Примерный код потока таков:
procedure TServerClientThread.ClientExecute;
begin
Potok:=TWinSocketStream.Create(ClientSocket,100000);
//Затем работаем с потоком
//по окончании
Potok.Free;
end;
И при выходе лезет ошибка "код5 отказано в доступе"
т.е именно когда необходимо, я так понимаю выйти из процесса с FreeOnTerminate:=True;
Пока поток крутиться и работает с данными, все в норме все отсылается и принимается. 100000 пробовал менять и на infinite, мало ли, может у меня ошибка лезет при Potok.Free; Не полечило. Причем ошибка лезет до наступления события TForm1.ServerSocketEndThread. Я так понял именно при разрушении потока. Может я не так понимаю процесс??? Варианты есть????
Если тоже самое делаю на TThread, то без проблем все разрушается и никаких ошибок. Но ведь не зря же создали TServerClientThread для многопоточных серверов.
← →
Сергей М. © (2006-06-21 15:09) [10]
> ошибка лезет при Potok.Free
Какая ?
← →
medved_68 © (2006-06-21 15:37) [11]
> Сергей М
Сначала куча Access Violant" ов а затем
> "код5 отказано в доступе"
Только не при Potok.Free ,а при завершении ClientExecute; после конечного end; но до наступления события TForm1.ServerSocketEndThread. Наверное я несколько хм. не так выразился.
Ошибка вылезает при разрушении процесса TServerClientThread.ClientExecute; т. е. после окончания данной процедуры. Я так понимаю, что если FreeOnTerminate:=True; процесс сам уничтожится, а у меня почему то не хочет он сам уничтожаться. Вернее даже, при самоуничтожении и возникает данная ошибка, по крайней мере я так думаю. Может дело в кешировании потоков ServerSocket"ом, хотя я об этом пока еще смутно представляю, нет достаточной инфы.
← →
Сергей М. © (2006-06-22 08:15) [12]Убирай отовсюду FreeOnTerminate:=True.
← →
medved_68 © (2006-06-22 08:36) [13]
> Сергей М. © (22.06.06 08:15) [12]
> Убирай отовсюду FreeOnTerminate:=True.
Так у меня и нет его. Он по умолчанию выставляется при вызове cтандартного конструктора TServerClientThread.Create; Я просто смотрел исходник TServerClientThread его там тоже нет, он тянется от TThread. Но если предположить, что дело в этом и явно определить FreeOnTerminate:=False, то тогда возникает вопрос: "Каким образом данный процесс будет разрушаться после отработки, за ненадобностью, мне его самостоятельно разрушать???". Не солидно как-то, типа проверяй, отработал там какой-то процесс или нет.
← →
Сергей М. © (2006-06-22 10:28) [14]
> Я просто смотрел исходник TServerClientThread его там тоже
> нет, он тянется от TThread
Цитата из исходников:
constructor TServerClientThread.Create(CreateSuspended: Boolean;
ASocket: TServerClientWinSocket);
begin
FreeOnTerminate := True;
FEvent := TSimpleEvent.Create;
inherited Create(True);
Priority := tpHigher;
ReActivate(ASocket);
if not CreateSuspended then Resume;
end;
> если предположить, что дело в этом и явно определить FreeOnTerminate:
> =False
Не нужно ничего предполагать и переопределять, тебя это вообще заботить не должно.
Твоя забота - грамотно и без непогашенных исключений отработать свою ClientExecute, все остальное (кэширование и разрушение тредов) компонент возьмет на себя.
← →
medved_68 © (2006-06-22 10:46) [15]
> Сергей М
> begin
> FreeOnTerminate := True;
> FEvent := TSimpleEvent.Create;
Согласен обшибся=:), сейчас накидаю небольшой пример попробую, хотя я уже их столько для себя накидал... А исход один и тот же=:(
← →
Сергей М. © (2006-06-22 13:32) [16]Под рукой всегда есть исх-ки scktsrvr.exe - там как раз и используется св-во ServerType = stThreadBlocking
← →
medved_68 © (2006-06-22 15:21) [17]
> Под рукой всегда есть исх-ки scktsrvr.exe - там как раз
> и используется св-во ServerType = stThreadBlocking
За это спасибо, попробуем въехать
С уважением...
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2006.11.12;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.043 c