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

Вниз

помогите разобратса из TcpServer TcpClient   Найти похожие ветки 

 
integery   (2005-09-08 19:07) [0]

есть програма сервер , и есть около 40 клиентов , посилаю собщение клиентам на получения файла из сервера , как организовать штоб клиенты по очереди законектились и получили файл. Я использую вот етод код , поправте пожалуста :

procedure TForm1.startLoad;
var s:string;
  buf: array[0..128] of char;
  len,l,l1,i:integer;
  f:file of char;
begin
    try
   TcpClient1.Active:=true;
   TcpClient1.Sendln("S");
   s:=TcpClient1.Receiveln;
   len:=strtoint(s);
   l:=0;
   AssignFile(f,"c:\temp\mon.cfg");
   Rewrite(f);
     repeat
       l1:=TcpClient1.ReceiveBuf(buf[0],128,0);
       l:=l+l1;
       for i:=0 to l1-1 do Write(f,buf[i]);
      until l=len;
finally
  if TcpClient1.Connected then TcpClient1.Disconnect;
  CloseFile(f);
end;

end;

procedure TForm1.TcpServer1Accept(Sender: TObject;
 ClientSocket: TCustomIpClient);
var
s:string;
fs:TFileStream;
begin
s:=ClientSocket.Receiveln;
   if s="S" then
   begin
      fs:=TFileStream.Create("C:\temp\monic.cfg",fmOpenRead);
       ClientSocket.Sendln(inttostr(fs.Size));
       ClientSocket.SendStream(fs);
        fs.Free;
    end;
end;


 
Tor ©   (2005-09-09 10:09) [1]

Чето я так и не понял вчем вопрос. Через этот код оно подключается или нет? Если нет что говорит. Зачем искать то чего возможно нет.
Я юзаю инди. Тама все клиенты в своем потоке подключаются, а одновременно или по очереди это уже не моя забота и хоть 41.
А файл передавал бы через файловый поток. Если надо могу схематический пример набросать.


 
integery   (2005-09-09 12:28) [2]

есть код
procedure TForm1.SpeedButton1Click(Sender: TObject);
var s:string;
  buf: array[0..128] of char;
  len,l,l1,i:integer;
  f:file of char;
begin
   try
   TcpClient1.Connect;
   Memo1.Lines.Add("get");
   TcpClient1.Sendln("S");
   s:=TcpClient1.Receiveln;
   Memo1.Lines.Add("Receiving: "+s);
   if s<>"" then
          begin
           len:=strtoint(s);
            l:=0;
               try
                   AssignFile(f,"c:\temp\mon.exe");
                   Rewrite(f);
                       repeat
                         l1:=TcpClient1.ReceiveBuf(buf[0],128,0);
                         l:=l+l1;
                         for i:=0 to l1-1 do Write(f,buf[i]);
                        until (l=len);
               finally
               CloseFile(f);
               end;
          end;
   finally
   if TcpClient1.Connected then TcpClient1.Disconnect;
   end;
end;

когда сервер вирубить клиент виснет наверное на цикле repeat как проверить што все дание принято а так получаетса сервер отрубилса клиет подвис а полученой файл загрузилса на половину.


 
integery   (2005-09-09 12:48) [3]

зделал
в цикле поставил проверку

repeat
l1:=TcpClient1.ReceiveBuf(buf[0],128,0);
if l1 < 0 then Abort;
......................
на сколько можно увеличить buf щас 128 а какой max ???


 
Digitman ©   (2005-09-09 15:08) [4]


> на сколько можно увеличить buf щас 128 а какой max ?


в дан.случае max < размер стека тек.трэда



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

Текущий архив: 2005.12.18;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.042 c
14-1133046422
Юзверюга
2005-11-27 02:07
2005.12.18
Музыка


4-1129888703
ZZZ
2005-10-21 13:58
2005.12.18
Программное изменение раскладки клавиатуры.


4-1129555315
dredd
2005-10-17 17:21
2005.12.18
инфа о motherboard


14-1132859236
Вероника
2005-11-24 22:07
2005.12.18
книги


2-1133183927
kblc
2005-11-28 16:18
2005.12.18
TComboBox