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

Вниз

ServerSocket, одновременная передача файлов клиентами   Найти похожие ветки 

 
ovb68   (2007-02-16 17:31) [0]

День добрый,
может что мне подскажите.
Я пишу клиент-сервер в основном для передачи файлов, довольно больших
700-900Mb.
Так вот для одного клиента все ОК. А вот уже с двумя начинаются траблы.
При одновременной передачи файлов, если первый клиент передает а в это время
начинает передавать файл второй клиент то
у первого все замирает, а второй успешно передает файл.

часть код сервера
procedure TForm1.ServerSocket1ClientConnect(Sender: TObject; Socket: TCustomWinSocket);
begin
 New(DataForSocket);
 DataForSocket^.FileName:= "";
 DataForSocket^.ReseveTxt:= False;
 DataForSocket^.Data:= False;
 DataForSocket^.TimeConnect:= TimeToStr(Time);
 Socket.Data:= DataForSocket;
 memo1.Lines.Add("Conect has done");
end;
procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket);
var
 PrtForData: ^TDataForSocket;
 b: array[0..8192] of char;
 rb:integer;
 wb:dword;
 i:integer;
begin
PrtForData:= Socket.Data;
if (not PrtForData^.Data) and (not PrtForData^.ReseveTxt) then
 begin
   PrtForData^.FileName:=Socket.ReceiveText;
   PrtForData^.FN:= PrtForData^.FileName + ".new";
   PrtForData^.ReseveTxt:= True;
   Socket.SendText("size");
 end
else
 if (not PrtForData^.Data) and (PrtForData^.ReseveTxt) then begin
   rb:=Socket.ReceiveLength;
   if rb >= sizeof(PrtForData^.FS2) then begin
       Socket.ReceiveBuf(PrtForData^.FS2,sizeof(PrtForData^.FS2));
       PrtForData^.MaxValue:=integer(PrtForData^.FS2);
       PrtForData^.Progress:=0;
       PrtForData^.Data:=true;
       if PrtForData^.FS2 > 0 then begin
          PrtForData^.M2:=CreateFile(PChar(PrtForData^.FN),GENERIC_READ or GENERIC_WRITE,FILE_SHARE_READ,nil,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);
          if PrtForData^.M2 <> INVALID_HANDLE_VALUE then Socket.SendText("Ok") ;
       end
   end
 end
 else begin
  rb:=Socket.ReceiveBuf(b,sizeof(b));
  if rb > 0 then begin
    WriteFile(PrtForData^.M2,b,rb,wb,nil);
    PrtForData^.Progress:=PrtForData^.Progress + rb;
    if PrtForData^.Progress=PrtForData^.MaxValue then begin
      PrtForData^.Data:=false;
      PrtForData^.ReseveTxt:=false;
      CloseHandle(PrtForData^.M2);
      PrtForData^.Progress:=0;
      Socket.SendText("end");
    end
    else Socket.SendText("Ok");
  end;
 end;
end;

Олег.


 
medved_68 ©   (2007-02-16 17:38) [1]


> При одновременной передачи файлов, если первый клиент передает
> а в это время
> начинает передавать файл второй клиент то
> у первого все замирает, а второй успешно передает файл.

ovb68 перейди на блокирующий режим и вынеси прием файлов сервером в отдельные потоки.



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

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

Наверх





Память: 0.45 MB
Время: 0.036 c
15-1190004777
naumovmag
2007-09-17 08:52
2007.10.14
Работа с COM портами


3-1181367762
Dmitry_177
2007-06-09 09:42
2007.10.14
какую лучше использовать базу для локального использования?


15-1189887624
wp2
2007-09-16 00:20
2007.10.14
Вот купил BlueTooth....


15-1189581269
Sergey13
2007-09-12 11:14
2007.10.14
Интерьер детской комнаты - ищу идеи.


2-1189687949
Havismat
2007-09-13 16:52
2007.10.14
Про окна, вопрос новичка





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