Hallo erstmal,
warum möchtest du das mit UDP machen?
UDP kümmert sich nämlich nicht darum das die einzelnen Pakete auch da ankommen wo sie hin sollenm und eignet sich damit mehr für Spiele als für Daten (Dateien,Bilder...)
Da kann es dir dann passieren das die hälfte das Bildes, (oder noch schlimmer der Header) nicht ankommt.
Mit
TCP geht das auch viel einfacher:
Der Client (Daten Senden):
Delphi-Quellcode:
var MyStream:TMemoryStream;
begin
mystream := TMemoryStream.Create;
image1.picture.SaveToStream(myStream);
ClientSocket.Socket.SendStream(myStream);
.
.
.
mystream.free;
Der Server (Empfangen):
Delphi-Quellcode:
procedure TServerSocketClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
iLen,tlen: longint;
Bfr: Pointer;
begin
if curmemory = nil then curmemory := TMemoryStream.Create;
curmemory.Seek(0, soFromEnd);
iLen := Socket.ReceiveLength;
GetMem(Bfr, iLen);
try
tlen := Socket.ReceiveBuf(Bfr^, iLen);
curmemory.Write(Bfr^, tLen);
finally
FreeMem(Bfr);
end;
end;
Wenn du es trozdem mit UDP machen willst nimm die
Indy Kompos. Der Code für den Server sollte der selbe sein.