![]() |
Socket ReceiveBuf und ReceiveText unterscheiden
Hallo;
Gibt es keine Möglichkeit um festzustellen op man nun Text oder Stream empfàngt? Ich habe versucht es so zu lösen:
Code:
Dann steht jedoich nichts im Memo1.
Stream:=TMemoryStream.Create;
Socket.ReceiveBuf(Stream,Socket.ReceiveLength); Received:=socket.ReceiveText; try Stream.Seek(0,soFromBeginning); Image2.Picture.Bitmap.LoadFromStream(Stream); Image2.Picture.Bitmap.SaveToFile('server_test.bmp'); except memo1.lines.append(socket.ReceiveText); end; Wenn ich anstelle von
Code:
memo1.lines.append(socket.ReceiveText);
Code:
benutze funktionniert es.
memo1.lines.append('blablabla');
Also werden die Informationen vorher weggenommen. Wie kann ich das verhindern beispielsweise umgehen? Dass ich am Ende noch den Text in das Memo setzen kann. mfG; |
Re: Socket ReceiveBuf und ReceiveText unterscheiden
Moin!
Zitat:
Zitat:
So, dann das Stream.Seek(), was sehr höchstwahrscheinlich abgestürzt ist, weil die Instanz in Stream durch Daten vom Socket überschrieben wurden, wahrscheinlich auch deshalb mit Try/Except zum Schweigen gebracht, bringt dann auch nix mehr, da keine Daten im Stream sind - bzw. überall, nur nicht dort. Die Instanz vom Stream ist eh verloren. Und als vorletztes gehst du sofort davon aus, dass bei einem Aufruf von OnClientRead() o.ä. mit einem ReceiveBuf() ein komplettes Bitmap empfangen wurde. Da muss ich dich enttäuschen. Dieser Fall würde nur bei wirklich kleinen Bitmaps eintreten. Im Normalfall müssen mehrere folgende Aufrufe von OnClientRead abgewartet werden, bis man das komplette TBitmap empfangen hat. Aber zu wissen wann dies der Fall ist, hilft dir wiederrum ein Protokoll, wo du vor dem Bitmap die Informationen schicken kannst, wie gross denn das folgende Bitmap ist. Und als aller letztes versuchst du erneut mit ReceiveText was aus dem Socket zu lesen - was aber mit 200%iger Wahrscheinlichkeit wieder nix ergibt, da der Socket wohl wiederrum noch nix neues empfangen hat. Dü könntest ansatzweise mal die Variable Received ins Memo schreiben - aber wie schon oben vermutet sollte da nix drinne stehen. Empfehlung: Ein Tutorial über Sockets und deren Komponenten (egal ob nun Indy oder TClientSocket/TServerSocket). PS: Zu deiner Signatur: Das "das" vor Leben hat eine bestimmte Bedeutung. Und mal so nebenbei: Substantive werden gross geschrieben... Muetze1 ist heut wieder bööööse :evil: :twisted: ... |
Re: Socket ReceiveBuf und ReceiveText unterscheiden
Hey!
Ich hab' das jetzt anders versucht. Funktionniert trotzdem nicht! :( Typen-Deklaration:
Code:
Versenden beim Client:
type
TYaimRec = record Text: String[200]; Img: TGraphic; end;
Code:
Empfangen beim Server:
Rec.Text:='IMG';
image1.Picture.Graphic.LoadFromFile('C:\test.jpg'); Rec.Img:=image1.Picture.Graphic; Client.Socket.SendBuf(Rec,sizeof(Rec));
Code:
Wieso funktionniert das nicht?
Socket.ReceiveBuf(Rec,SizeOf(Rec));
if rec.Text='IMG' then begin rec.img.SaveToFile('C:\test_received.jpg'); end else showmessage(Rec.Text); Beim speichern am Server
Code:
bekomm' ich eine Access violation.
rec.img.SaveToFile('C:\test_received.jpg');
mfG; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:53 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