Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > Передача файла через ServerSocket ClientSocket


Автор: SanLLIer 11.2.2010, 20:23
Люди прошу помощи...
Суть дела: есть приложение, состоящее из сервера и клиентской части. При подключении к серверу клиент пересылает свои параметра: имя, id... Сервер добавляет все в базу данных и пр....
Потом когда к серверу подключатся все клиенты, сервер отсылает им всем файл. Ну и вот на этом шаге заковырка smile 
Выдает ошибку: "Запрос на отправку или получение данных (when sending on a datagram socket using a sandto call) (10057)".
Что это? Как бороться?

код сервера:
Код

procedure TFProc.SpeedButton1Click(Sender: TObject);
var ms: TMemoryStream;
begin
ms:= TMemoryStream.Create;
    try
      ms.LoadFromFile(FLogin.sPath+'\Library\'+Lib_dialog.for_use+'.test');
      ms.Position:= 0;  
      ServerSocket1.Socket.SendText(IntToStr(ms.Size) + #0);          //вот здесь, на отправке текста вылезает ошибка!
      ServerSocket1.Socket.SendStream(ms);
    except    
      ms.Free;    
    end;    
end;


код клиента:
Код

var s, sl: string;
begin
s:= Socket.ReceiveText;  
 if not Reciving then
  begin  
    SetLength(sl, StrLen(PChar(s))+1); // +1 for the null terminator    
    StrLCopy(@sl[1], PChar(s), Length(sl)-1);    
    DataSize:= StrToInt(sl);    
    Data:= TMemoryStream.Create;
    Data.SaveToFile(sPath+'\data.tmp');  
    Delete(s, 1, Length(sl));    
    Reciving:= true;    
  end;    

  try    
    Data.Write(s[1], length(s));    
    if Data.Size = DataSize then    
    begin    
      Data.Position:= 0;      
      Data.Free;    
      Reciving:= false;    
      Socket.Close;    
    end;    
  except    
    Data.Free;    
  end;    
end;   


Код брал из DRKB ничего не изменял. Это текст "тестовой" версии, здесь отправка одному клиенту, но если это заработает, то сделать массовую отправку легко.

Что самое смешное, когда делал прогу чтобы чисто потестить этот код (пересылки файла), то все работало... Где же здесь грабли? smile 

Автор: kami 11.2.2010, 21:39
Цитата(SanLLIer @  11.2.2010,  20:23 Найти цитируемый пост)
ServerSocket1.Socket.SendText(IntToStr(ms.Size) + #0);          //вот здесь, на отправке текста вылезает ошибка!

И это естественно. Ибо ServerSocket1.Socket - это слушающий сокет.
Тебе нужны ServerSocket1.Socket.Connections[i].SendText

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)