Hallo,
ich habe ein PRoblem mit den Sockets...
Ich sende über ein ClientSocket ein JPEG-Bild an einen Serversocket.
Jedoch wird nur bei jedem 2. Aufruf des sendens tatsächlich ein bild übertragen.
ich hab kA wieso
Mein Client-Code:
Code:
MS := TMemoryStream.Create;
try
// JPEG erstelleb etc...
jpg.SaveToStream(ms);
MS.Position := 0;
clientsocket2.Open;
application.processmessages;
clientsocket2.Socket.SendBuf(MS.Memory^, MS.Size);
application.processmessages;
clientsocket2.Close;
bmp.Free;
jpg.Free;
finally
MS.Free;
end;
Der Server-Code
Code:
type TReceiveThread = class(TServerClientThread)
protected
procedure Execute; override;
end;
procedure TReceiveThread.Execute; // DIESE PROZEDUR WIRD NUR JEDES 2. MAL AUFGERUFEN...
var
WS: TWinSocketStream;
MS: TMemoryStream;
GetSize: Integer;
Buffer: array[0..8191] of Char;
jpg : TJpegImage;
bmp : Tbitmap;
begin
MS := TMemoryStream.Create;
try
while (not Terminated) and ServerSocket.Connected do
begin
WS := TWinSocketStream.Create(ClientSocket, 500);
try
if WS.WaitForData(60000) then
begin
GetSize := WS.Read(Buffer, SizeOf(Buffer));
while (GetSize > 0) do
begin
MS.Write(Buffer, GetSize);
GetSize := WS.Read(Buffer, SizeOf(Buffer));
end;
MS.Position := 0;
jpg := TJPEGImage.Create;
jpg.LoadFromStream(ms);
terminate
end;
finally
WS.Free;
end;
end;
finally
MS.Free;
end;
end;
procedure TForm1.ServerSocket2GetThread(Sender: TObject;
ClientSocket: TServerClientWinSocket;
var SocketThread: TServerClientThread);
begin
SocketThread := TReceiveThread.Create(False, clientSocket);
end;
ich hoffe, einer weiß es!
grüße
dk