30-10-2012, 10:39 AM
السلآم عليكم ورحمة الله وبركاته ..
كيف يمكنني أرسال ملف من ServerSocket الى ClientSocket وحفظه في مجلد معين ؟
استخدم الطريقة التالية لكنها غير ناجحة وفيها اخطاء كثيراً
السيرفر
العميل :
كيف يمكنني أرسال ملف من 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;