ماهي طريقة ارسال ملف بمكون Socket
#1
السلآم عليكم ورحمة الله وبركاته ..

كيف يمكنني أرسال ملف من ServerSocket الى ClientSocket وحفظه في مجلد معين ؟

استخدم الطريقة التالية لكنها غير ناجحة وفيها اخطاء كثيراً
السيرفر
PHP كود :
private
    
Stream: TMemoryStream;
,,,,,
procedure TForm10.pnchk1ClientRead(Sender: TObject; Socket: TCustomWinSocket);
 var   
s,r,str,all_Room:string;
       
Size,i,n:integer;
  
begin
   S
:=utf8Decode(Socket.ReceiveText);
   
n:=pos('@',S);
   if 
n>0 then
   begin
     str
:=copy(S,1,n-1);
    if 
str='*Mr2*' then
     begin
    
try
    
Stream:= TMemoryStream.Create;
    
Stream.LoadFromFile('e:\MorvaServer\MorvaC.jpg');
    
Size:= Stream.Size;
    for 
i:=0 to pnchk1.Socket.ActiveConnections-1 do
    
begin
    pnchk1
.Socket.Connections[i].SendBuf(Size,SizeOf(Size));
    
end;
    for 
n:=0 to pnchk1.Socket.ActiveConnections-1 do
    
begin
    pnchk1
.Socket.Connections[n].SendStream(Stream);
    
end;
    
except
    end
;
     
end;
end;
  
end; 
العميل :
PHP كود :
private
    
Stream: TMemoryStream;
    
FSize: Integer;
    
writing: Boolean;
,,,,,
procedure TForm1.Rom1Read(Sender: TObject; Socket: TCustomWinSocket);
var
  
BytesReceived: Longint;
  
CopyBuffer: Pointer;
  
ChunkSize: Integer;
  
TempSize: Integer;
  
FS: TFileStream;
const
MaxChunkSize: Longint = 8192;
begin
try
 If 
FSize=0 then
  begin
    
If Socket.ReceiveLength>SizeOf(TempSize) then
    begin
      Socket
.ReceiveBuf(TempSize,SizeOf(TempSize));
      
Stream.SetSize(TempSize);
      
FSize:= TempSize //Threadsafe code!
    
End;
  
End;
  If (
FSize>0) and not(writing) then
  begin
    GetMem
(CopyBuffer, MaxChunkSize); { allocate the buffer }
    
writing:= True;
    While 
Socket.ReceiveLength>0 do
    
Begin
      ChunkSize
:= Socket.ReceiveLength;
      If 
ChunkSize > MaxChunkSize then ChunkSize:= MaxChunkSize;
      
BytesReceived:= Socket.ReceiveBuf(CopyBuffer^,ChunkSize);
      
Stream.Write(CopyBuffer^, BytesReceived);
      
Dec(FSize,BytesReceived);
    
End;
    If 
FSize=0 then
      Stream
.SaveToFile('C:\MorvaC\MorvaC.jpg);
      Socket.SendText('
File received!');
      Stream.SetSize(0);
      FSize:= 0;
    End;
  FreeMem(CopyBuffer, MaxChunkSize);
  Writing:= False;
  except
  end;
end; 

اللهمّ إنّي ظلمت نفسي ظلماً كثيراً ولا يغفر الذّنوب إلا أنت

فاغفر لي مغفرة من عندك وارحمني إنّك أنت الغفور الرّحيم
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم