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

Вниз

Нужна помощь   Найти похожие ветки 

 
просто_ник ©   (2007-06-28 23:47) [0]

TServerSocket -> stThreadBlocking -> как в етом случае отправить TFileStream, или бесполезно


 
SlymRO ©   (2007-06-29 04:29) [1]

Я бы сказал даже полезно...
Ты попробуй, оно не кувалдой махать...


 
просто_ник ©   (2007-06-29 11:35) [2]

режим сервера блокирующий
кувалда и Socket.SendStream(f) не проходит
играться с буфером немножко не в тему


 
medved_68 ©   (2007-06-29 11:36) [3]


> как в етом случае отправить TFileStream

Так же как и в любом другом.


 
Сергей М. ©   (2007-06-29 11:42) [4]


> просто_ник ©   (29.06.07 11:35) [2]


> режим сервера блокирующий


И что ?


> Socket.SendStream(f) не проходит


Не выдумывай.
Оч даже замечательно проходит.


> играться с буфером немножко не в тему


А причем здесь буфер ?


 
просто_ник ©   (2007-06-29 11:55) [5]

клиент не получает никакого события OnRead и никаких данных
в случае fSocketStream.WriteBuffer(buf,Length(buf)); или SendText все нормально, мистика


 
Сергей М. ©   (2007-06-29 12:01) [6]


> просто_ник ©   (29.06.07 11:55) [5]


Показывай, как у тебя реализован ClientExecute


 
просто_ник ©   (2007-06-29 12:05) [7]

в смысле ClientExecute, там я просто использую OnRead


 
Сергей М. ©   (2007-06-29 12:10) [8]

Тогда показывай обработчик OnRead


 
просто_ник ©   (2007-06-29 12:21) [9]

а если fSocketStream.CopyFrom(f,f.Size), вроде бы работает, только-что проверил принял 3 мг


 
Сергей М. ©   (2007-06-29 12:26) [10]

SendStream тоже обязан работать.

Другой вопрос что вызов тобой в OnRead/OnWrite любого из методов передачи лишает тебя всех преимуществ ThreadBloking-режима.


 
просто_ник ©   (2007-06-29 12:28) [11]

клиенту ж в принцыпе без разницы в каком режиме работает сервер, преимущества нужны для сервера, клиенты много передавать не будут


 
просто_ник ©   (2007-06-29 12:37) [12]

а с OnRead думаю все в порядке

procedure TForm18.dreamClientSocketRead(Sender: TObject;
 Socket: TCustomWinSocket);
var
 command:integer;
 temp:string;
begin

if SizeStream=0 then begin
 command:=StrToInt(Copy(temp,0,4));
 case command of
 7044:begin
   activCopy:=true;
   GlobalCommand:=command;
   command:=0;
   Delete(temp,1,4);
   temp2:=copy(temp,0,Pos("*",temp)-1);
   Delete(temp,1,Pos("*",temp));
   sizeStream:=StrToInt(temp2);

   GlobalFileStream:=TFileStream.Create(globalFileName,fmCreate);
   GlobalFileStream.Position:=0;
   GlobalFileStream.Write(temp[1],Length(temp));

   GlobalDisconnect.fileNameSave:=globalFileName;
   GlobalDisconnect.login:=Edit1.Text;
   GlobalDisconnect.Size:=sizeStream;
   GlobalDisconnect.SizeDisconnect:=GlobalFileStream.Size;
   speed:=speed+GlobalDisconnect.SizeDisconnect;
     if GlobalFileStream.Size=sizeStream then begin
     command:=GlobalCommand;
     sizeStream:=0;
     GlobalCommand:=0;
     GlobalDisconnect.open:=false;
     end;
 end;
 0999:;
 end;
 end else begin
 case GlobalCommand of
   7044:begin
   GlobalDisconnect.open:=true;
   GlobalFileStream.Position:=GlobalFileStream.Size;
   GlobalFileStream.Write(temp[1],Length(temp));

   progressBar(@bm1);

     if GlobalFileStream.Size=sizeStream then begin
     command:=GlobalCommand;
     GlobalCommand:=0;
     sizeStream:=0;
     end;
   end;
 end;
 0999:;  
 end;
 end;

 case command of
 7044:begin
 activCopy:=false;
 GlobalFileStream.Free;
 end;
 0999:;
 end;

end;


 
Сергей М. ©   (2007-06-29 12:45) [13]


> клиенту ж в принцыпе без разницы в каком режиме работает
> сервер


Совершенно верно.


> преимущества нужны для сервера


Вот как раз их ты и лишаешься, потому что обработка OnRead выполняется в основном треде.


> с OnRead думаю все в порядке


Далеко не все в порядке !

Это что, полный текст обработчика ?

И где в нем собственно тот самый SendStream ?


 
просто_ник ©   (2007-06-29 12:51) [14]

обработка OnRead выполняется клиентом, который даже не подозревает в каком режиме работает сервер, а сервер соотвественно не подозревает в каком режиме работает клиент или даже какая там ОС


 
просто_ник ©   (2007-06-29 12:53) [15]

обработчик вырван из кода поетому некоторые выщи например temp:=Socket.ReceiveText, я случайно пропустил, извиняюсь


 
Сергей М. ©   (2007-06-29 12:55) [16]

Так-с.

Ты вообще о чем  - о сервере ?

Судя по TServerSocket -> stThreadBlocking - именно о нем.

Так какого же ляда ты приплел сюда клиента и приводишь код клиента, а не сервера ?


 
просто_ник ©   (2007-06-29 13:02) [17]

проблема была в том что бы отправить файловый поток сервером в режиме stThreadBlocking клиенту и не терять преимущества stThreadBlocking, как клиент будет их принимать или не будет вообще без разницы.
SendStream в етом случае отпадает, с кодом на сервере думаю все нормально, я хотел услышать что-то наподобие fSocketStream.CopyFrom(f,f.Size) - что пришло мне методом научного тыка


 
Сергей М. ©   (2007-06-29 13:05) [18]


> проблема была в том что бы отправить файловый поток сервером
> в режиме stThreadBlocking


Ну так если она тебя еще волнует, прводи сюда свой код ClientExecute !

Я ж тебе еще в [6] это сказал, а тебя почему-то понесло на кл.сторону)


 
просто_ник ©   (2007-06-29 13:10) [19]

так проблема уже ж решена  
fSocketStream.CopyFrom(f,f.Size)

самое основное

type
 EServerThread = class( Exception );
 TServerThread = class( TServerClientThread )
   private
     fSocketStream : TWinSocketStream;
   public
     procedure ClientExecute; override;
 end;

implementation

uses Unit1;

procedure TServerThread.ClientExecute;
 f:TFileStream;
begin
 inherited FreeOnTerminate := TRUE;

 fSocketStream := TWinSocketStream.Create(ClientSocket,1000000);
 f:=TFileStream.Create("2.ddd",fmOpenRead);
 fSocketStream.CopyFrom(f,f.Size)

 ClientSocket.Close;
 fSocketStream.Free;

end;


 
просто_ник ©   (2007-06-29 13:13) [20]

и еще
 while (not Terminated) and(ClientSocket.Connected) do begin
 if (not Terminated) and
  (not fSocketStream.WaitForData(1000)) then  else...

обработка ошибок и прочее, да все тут нормально


 
Сергей М. ©   (2007-06-29 13:24) [21]


> проблема уже ж решена


Ну решена знач решена. Дело хозяйское. Только вот и не было никакой проблемы, а была лишь твоя ошибка в 17-й строке.


> inherited FreeOnTerminate := TRUE;


Зачем FreeOnTerminate ? Да еще и inherited ?


 
просто_ник ©   (2007-06-29 13:38) [22]

я вырывая код кусками (большой очень), кстати
ClientSocket.Close; fSocketStream.Free; в обработчике ошибок
а FreeOnTerminate на случае неактивности сокета

fSocketStream := TWinSocketStream.Create(ClientSocket,1000000);


 
Сергей М. ©   (2007-06-29 13:43) [23]


> а FreeOnTerminate на случае неактивности сокета


Эт чего, прямо так в справке и написано - самоликвидироваться в таком-то случае ?

Отсебячина, барин, отсебячина)


> fSocketStream := TWinSocketStream.Create(ClientSocket,1000000);


Мог бы и не повторяться, я не слепой)


 
просто_ник ©   (2007-06-29 13:49) [24]

а я слышал где-то (не в справке) что там что - то  не разрушается до конца


 
Сергей М. ©   (2007-06-29 13:53) [25]


> слышал где-то


Я даже знаю где - в ресурсах ОБС.


 
просто_ник ©   (2007-06-29 13:54) [26]

ладно, проехали, и конечно спасибо за активность я не ожидал таковую


 
Сергей М. ©   (2007-06-29 13:56) [27]

Ну прлоехали знач проехали.
Жаль вот только, что ты так и не разобрался в сабже, предпочтя объехать его через Китай)


 
SlymRO ©   (2007-07-02 08:37) [28]

while (not Terminated) and(ClientSocket.Connected) do begin
if (not Terminated) and
 (not fSocketStream.WaitForData(1000)) then  else...

НЕЛЬЗЯ ТАК!
просто_ник ©   (29.06.07 13:49) [24]
что там что - то  не разрушается до конца

Так и есть... Кэш в 10 потоков (по деволту)...
Terminated может и ненаступить! твой флаг ClientSocket.Connected и только!
и никаких FreeOnTerminate... сервер сам разберется что и когда ему Free



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

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

Наверх




Память: 0.52 MB
Время: 0.045 c
15-1182946542
de.
2007-06-27 16:15
2007.07.29
RxLib


2-1183624901
nord489
2007-07-05 12:41
2007.07.29
MainMenu


11-1166415709
SecurAdmin
2006-12-18 07:21
2007.07.29
KOL+ перетаскивание формы за любую ее точку


2-1183407477
Okolobaxa
2007-07-03 00:17
2007.07.29
Странная ошибка при выполнении


2-1183697767
delphino
2007-07-06 08:56
2007.07.29
Не могу найти ошибку в выражении





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский