![]() |
Problem mit WinSockets
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 :pale: Mein Client-Code:
Code:
Der Server-CodeMS := 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;
Code:
ich hoffe, einer weiß es!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; grüße dk |
Re: Problem mit WinSockets
... also ich verschicke meine dateien so (nicht nur jpegs):
sender:
Delphi-Quellcode:
receiver:
procedure TForm1.btn_sendClick(Sender: TObject);
var stream:TFileStream; begin try cli.Port := strtoint(ed_port.text); cli.Address := ed_ip.Text; cli.Open; stream := TFileStream.Create(ed_file.Text,fmopenread); cli.Socket.SendStream(stream); except me_status.lines.add('error'); end; end;
Delphi-Quellcode:
ps:
var
outstream: TFileStream; procedure TForm1.create; begin outstream := TFileStream.Create(ed_file.text,fmcreate); end; procedure TForm1.srvClientRead(Sender: TObject; Socket: TCustomWinSocket); var len:integer; rc:array [0..9999] of char; begin memo1.Lines.Add('READ > '+socket.remoteaddress); len := socket.ReceiveBuf(rc,sizeof(rc)); outstream.write(rc,len); end;
Code:
ich weiss nicht ob es das ist, was du wolltest, da du mit threads arbeitest aber vielleicht hilft es dir weiter ...
cli: TClientSocket;
srv: TServerSocket; greetz -FastJack2 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:51 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz