Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.12.2008, 20:07   #1
Unconnected
Пользователь
 
Регистрация: 23.06.2008
Сообщений: 55
По умолчанию Передача файла через сокет Delphi

Требуется передать файл с клиента на сервер. Пробовал способы, описанные статьями в интернет, но так и не получилось, т.к. у моей проги принцип немного другой. Есть ли рабочий код конкретно передачи файла?
Unconnected вне форума Ответить с цитированием
Старый 22.12.2008, 21:38   #2
Pedro
Форумчанин
 
Аватар для Pedro
 
Регистрация: 25.03.2007
Сообщений: 166
По умолчанию

Это через ClientSocket/ServerSocket? Если да, то ищите на форуме, точно есть готовый код. А мой совет - используйте Indy.
Pedro вне форума Ответить с цитированием
Старый 22.12.2008, 21:38   #3
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

показывайте что вы пробовали и что не получилось, пока вопроса в теме не вижу.
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 23.12.2008, 16:01   #4
Unconnected
Пользователь
 
Регистрация: 23.06.2008
Сообщений: 55
По умолчанию

Файл нужно отправить с клиента на сервер(использую TClientSocket и TServerSocket). Принимаю так(помимо файлов программа ещё и принимает текстовые сообщения, #N,#M - это идентефикаторы):

Код:
procedure TForm3.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var s,sl: string;
    i: Integer;
begin
  s:=Socket.ReceiveText;
  if Copy(s,1,2)='#N' then begin
  Delete(s,1,2);
  listBox1.Items.Add(s);
  s:='#U';
  for i := 0 to ListBox1.Items.Count-1 do
  s:=s+ListBox1.Items[i]+';';
  for i := 0 to ServerSocket1.Socket.ActiveConnections-1 do
  ServerSocket1.Socket.Connections[i].SendText(s);
  Exit;
  end;
  if (Copy(s,1,2) = '#M')or(Copy(s,1,2) = '#P') then
  begin
    for i := 0 to ServerSocket1.Socket.ActiveConnections-1 do
    ServerSocket1.Socket.Connections[i].SendText(s);
    Exit;
  end;
  if (copy(s,1,2)='#F') then
begin
  delete(s,1,2);
  if Reciving then
  Begin
    fs.Write(s[1],length(s));
    if fs.Size=DataSize then
    Begin
      fs.Free;
      Reciving:=False;
      Application.MessageBox('Поздравляю, Фаил принят', 'Внимание!!!');
    End;
  Exit;
End;
  if copy(s, 1, 5)='Size:' then
  Begin
    sl:=copy(s, 6, Pos(#0, s)-6);
    DataSize:=StrToInt(sl);
    Delete(s, 1, Pos(#0, s));
    Reciving:=True;
    fs:=TFileStream.Create('output.jpg',fmCreate);
    fs.Write(s[1], length(s));
    showmessage('Пакет принят');
  End;
End;
end;
Отправляю так:

Код:
Procedure sendfile;
Var
  fs: TFileStream;
Begin
  fs:=TFileStream.Create(form7.Edit1.Text, fmOpenRead);
Try
  fs.Position:=0;
  form1.ClientSocket1.socket.SendText('#F'+'Size:'+IntToStr(fs.Size)+ #0);
  form1.ClientSocket1.Socket.SendStream(fs);
Finally
end;
End;
При всём этом принимающая часть сохдаёт файл весом около 7 килобайт, как я понял, принимается только первый пакет. Что я не так делаю?
Unconnected вне форума Ответить с цитированием
Старый 23.12.2008, 16:16   #5
Unconnected
Пользователь
 
Регистрация: 23.06.2008
Сообщений: 55
По умолчанию

Всё,нашёл свою ошибку
Unconnected вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача файла через TServerSocket и TClientSocket Vanya Работа с сетью в Delphi 10 08.04.2008 18:12
передача данных через idtcpclient BioS Работа с сетью в Delphi 0 20.02.2007 11:04
Передача данных(массива) через DLL. acorables Общие вопросы Delphi 4 05.02.2007 13:16