Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Пример передачи файла через Socket в режиме stThreadBlocking... [D5, Win2k, WinXP]


Страницы:   1 2

TankMan ©   (2005-04-01 08:07:00) 

Немогу разобраться, может кто-нибудь поделиться примером, работающим примером?


Nes   (2005-07-11 12:45:00) [1]

Arrr 2 Dust: Component->Install Packages->Add->Bin/dclsockets70.bpl


Nes   (2005-07-11 12:42:00) [2]

http://www.sources.ru/delphi/delphi_send_files_tcs_tss.shtml


Ботвин Дмитрий   (2005-07-11 08:36:00) [3]

>Dust ©   (09.07.05 18:27) [30]

Так и в D7 есть TClientSocket и TServerSocket, просто их нужно
устновить. Устанавливай и работай....


debuger   (2005-07-10 14:25:00) [4]

что-то типа того: TTCPClient, TTCPServer?


Dust   (2005-07-09 18:27:00) [5]

Народ, есть программа, которая запросто компилируется и работает в Delphi 5, в ней использовались компоненты TClientSocket и TServerSocket, как её можно откомпилировать в Delphi 7,
чем можно заменить эти компонеты? как потом переделать исходный код?


Digitman   (2005-04-19 11:38:00) [6]


> TankMan ©   (19.04.05 07:59) [27]


понимаешь ли, в ЛЮБОМ случае тебе придется адаптировать тот или иной алгоритм (пусть он хоть тысячу раз работоспособен в том виде в каком ты его поимел) под свои потребности .. а без знания и эффект.использования встр.отладчика тебе этот алгоритм как мертвому припарка .. так что садись за буквари и срочно штудируй встроенные возможности среды по отладке/трассировке ОР-кода


Ozone   (2005-04-19 11:32:00) [7]

Дык и не ответят, ИмХО. Раз не умеешь пользоваться отладчиком - учись.


TankMan   (2005-04-19 07:59:00) [8]

Не сочтите за грубость, но намой вопрос так и не кто не ответил...


Digitman   (2005-04-15 08:48:00) [9]


> TankMan ©   (15.04.05 08:24) [25]


> работать я с ним не умею


это очень печально.
не одну еще шишку набьешь себе, пытаясь приспособить чужой код по принципу "авось заработает"


TankMan   (2005-04-15 08:24:00) [10]

>>Digitman
Про встроенный отладчик я слышал, и даже видел, но не более того...,т.е. работать я с ним не умею :((к сожалению)
SoftIce мне знаком, а вот этот отладчик нет...

>>Verg
Т.е. ты говоришь, что у тебя приведенный код работает на 100%?


Verg   (2005-04-14 18:24:00) [11]


> TankMan ©   (14.04.05 06:48) [22]


Все проверено досканально и не только мной, или ты думаешь ты первый, кто использует TWinSocketStream?
Помнится было однажды тут необъяснимое с этим объектом. Оказалось, что не собственно с ним, а с overlapped IO на сокетах. Даже тема вспоминается: "Что лучше recv или readfile..." или что-то типа того...
Переустановил винды чел - помогло.


Digitman   (2005-04-14 09:01:00) [12]


> TankMan ©   (14.04.05 06:48) [22]


слушай, ты про встроенный в делфи отладчик хоть что-нибудь слышал ?
или использование оного в целях поиска источников проблем - "не царское дело" ?


TankMan   (2005-04-14 06:48:00) [13]

Хм.. я отдельно сделал проэктики, чтобы реализовать таки возможность передачи файлов, а не получается, там код, что ты привел в пример, у тебя все работает, или ты не пробовал?


Verg   (2005-04-13 17:12:00) [14]


> TankMan ©   (13.04.05 07:02) [20]


Разбирайся, разбирайся. Sock.CopyFrom(sFile,0) все наипрекраснейшим образм делает. Ищи ошибки не только, где ты думашь, что они могут быть, а везде.


TankMan   (2005-04-13 07:02:00) [15]

Может всетаки имеет какой-нибудь рабочий пример? - разберусь как-нибудь то уж :(...


Verg   (2005-04-12 12:22:00) [16]

Note: The Stream passed as a parameter to SendStream becomes “owned” by the windows socket object.  The Windows socket object frees the stream when it is finished with it.   Do not attempt to free the stream after it has been passed as a parameter.


Slym   (2005-04-12 11:43:00) [17]

Free нужна всегда и везде!
А в остальном я ЗдаюсЪ... (у тебя код перед глазами ставь бряк поинты и трасируй, может синтаксически код и не правильный, я не проверял, но логически правильный уверен на 99%)


TankMan   (2005-04-11 14:53:00) [18]

З.Ы.
Ах да забыл, sFile.Free; не нужен же вклиенте (написано в справке) или я ошибаюсь?


TankMan   (2005-04-11 14:51:00) [19]

>>Slym
Ну я уже в изнеможении!! Чтож такое твориться то!?
Не работает! Выдает ошибку на строке FileStream.CopyFrom(Stream,Size); AccessViolation...
Я подумал всетаки что это же 2 посылки в клиенте, может два и приняти должно быть т.е.:
if Stream.WaitForData(10000) then
    begin
      Stream.ReadBuffer(Size,4);
      if Size=0 then Abort;
      FileStream:=TFileStream.Create(ExtractFilePath(ParamStr(0))+'vot.upd',fmCreate);
      try
Переделал в что-то типа:
if Size=0 then begin
Stream.ReadBuffer(Size,4);
if Size=0 then Abort; end else
begin
FileStream:=TFileStream.Create(ExtractFilePath(ParamStr(0))+'vot.upd',fmCreate);
      try
....
Но выдаваться стала ошибка с acessviolation в Stream.WaitForData, и я сделал обратно как было,
И не понимаю, почему же он читая эти 4 байта не хочет читать поток далее? Посмотрел по справке, если TFileStream.Create не удался то сразуже генерируется исключительная ситуация, точно так же и с TWinSocketStream.Create, т.е. объекты были созданы, со стороны клиента тоже нет никаких нареканий, но тогда ПОЧЕМУ!?!? Подскажи? Я не могу понять...:(


Slym   (2005-04-11 12:49:00) [20]


unit SocketThread;

interface
uses Windows,ScktComp,Classes;

type
TSocketThread=class(TServerClientThread)
protected
 procedure ClientExecute; override;
end;

var
src:TFileStream;

implementation

uses unit1,SysUtils;

{ TSocketThread }

procedure TSocketThread.ClientExecute;
var
 Stream:TWinSocketStream;
 Size:integer;
 FileStream:TFileStream;
begin
 Stream:=TWinSocketStream.Create(ClientSocket, 60000);
 try
   while (not Terminated) and ClientSocket.Connected do
   begin
     if Stream.WaitForData(10000) then
     begin
       Stream.ReadBuffer(Size,4);
       if Size=0 then Abort;
       FileStream:=TFileStream.Create(ExtractFilePath(ParamStr(0))+'vot.upd',fmCreate);
       try
         FileStream.CopyFrom(Stream,Size);
       finally
         FileStream.Free;
       end;
       ClientSocket.Close
     end else
      ClientSocket.Close;
   end;
 finally
   Stream.Free;
 end;
end;
end.



Клиент

procedure TForm1.Button2Click(Sender: TObject);
var
Client: TClientSocket;
sFile:TFileStream;
begin
Client:=TClientSocket.Create(nil);
try
  Client.ClientType:=ctBlocking;
  Client.Address:='127.0.0.1';
  Client.Port:=6184;
  sFile:=TFileStream.Create(edit3.text,fmOpenRead);
  try
    Client.Open;
    Client.Socket.SendBuf(sFile.Size,4);
    Client.Socket.SendStream(sFile)
  finally
    sFile.Free;
  end;
finally
  Client.Free;
end;
end;


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо