ماهي طريقة ارسال ملف بمكون 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; 

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

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


الردود في هذا الموضوع
ماهي طريقة ارسال ملف بمكون Socket - بواسطة M_Mori2010 - 30-10-2012, 10:39 AM

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


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