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

Вниз

передача файлов через 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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.052 c
15-1161853778
Ricko
2006-10-26 13:09
2006.11.12
Оцените программу


15-1161339330
ArtemESC
2006-10-20 14:15
2006.11.12
Язык, который всем нравится...


2-1161962845
чел
2006-10-27 19:27
2006.11.12
не отображается первичный ключ


2-1161758334
yel
2006-10-25 10:38
2006.11.12
GLScene хочет Python_d7 и dws2Runtime


3-1158224830
vodvorezlaya
2006-09-14 13:07
2006.11.12
Подскажите с компонентом TDBEdit и TDBComboBox