Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Передача файла через ServerSocket ClientSocket 
:(
    Опции темы
SanLLIer
  Дата 11.2.2010, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 9.7.2008

Репутация: нет
Всего: нет



Люди прошу помощи...
Суть дела: есть приложение, состоящее из сервера и клиентской части. При подключении к серверу клиент пересылает свои параметра: имя, 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 
PM MAIL   Вверх
kami
Дата 11.2.2010, 21:39 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 6
Всего: 72



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

И это естественно. Ибо ServerSocket1.Socket - это слушающий сокет.
Тебе нужны ServerSocket1.Socket.Connections[i].SendText
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0389 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.