Как передать картинку по сети через ServerSocket?
Материал из DRKB
Со стороны, откуда посылаем (у нас это клиент), пишем:
var
st: TStream;
begin
st := TFileStream.Create('M:\\MyFile.jpg', fmOpenRead);
// ИЛИ, если мы работаем без сохранения (тогда не создается файл)
st := TMemoryStream.Create();
try
st.Position := 0;
Image1.Picture.Bitmap.SaveToStream(st);
// и, наконец, шлем на сервер битмап
st.Position := 0;
ClientSocket1.Socket.SendStream(st);
finally
st.Free();
end;
end;
Обратите внимание, не забывайте перед каждой операцией с потоком устанавливать позицию в 0!!! Иначе получим не то, что хотелось бы
Ну а со стороны приема (у нас это, соответственно, серверсокет), в событии приема пишем:
var
ibLen: Integer;
buf: AnsiString;
st: TStream;
begin
ibLen := ServerSocket1.Socket.ReceiveLength();
if ibLen > 0 then
begin
SetLength(buf, ibLen + 1);
st := TMemoryStream.Create();
try
st.Position := 0;
ServerSocket1.Socket.ReceiveBuf(buf[1], ibLen);
st.WriteBuffer(buf[1], ibLen);
st.Position := 0;
Image1.Picture.Bitmap.LoadFromStream(st);
// или
st.SaveToFile('M:\\MyFile.jpg');
finally
st.Free();
end;
end;
end;
Author: TwoK
Source: Vingrad.ru http://forum.vingrad.ru
ID: 03545