![]() |
Stream über Indy 10 senden
Problem:
Erstellter Stream lässt sich nict auf den Socket schreiben es kommt die fehlermeldung : "Keine Daten für den Lesezugriff!" Code:
Delphi-Quellcode:
fSocket ist verbunden.
type
TDatensatz = record ID: integer; Name: AnsiString; end; TDatenArray = array of TDatensatz; ..... FSocket: TIdTCPClient; ...... var hStream :TStream; hSize : Integer; Daten : TDatenArray; begin SetLength(Daten, 1); Daten[0].ID := 1; Daten[0].Name := 'Ein Name'; hSize := SizeOf(Daten); hStream := TMemoryStream.Create; hStream.WriteBuffer(Daten, hSize); FSocket.Socket.WriteBufferOpen; FSocket.Socket.Write(hStream,hSize); FSocket.Socket.WriteBufferFlush; FSocket.Socket.WriteBufferClose; hStream.free; |
AW: Stream über Indy 10 senden
Delphi-Quellcode:
Setze mal den Positionszeiger wieder auf den Anfang des Streams. :gruebel:
hStream.WriteBuffer(Daten, hSize);
hStream.Position := 0; [add] Aber das Scheiben der Daten ist definiv auch noch falsch, denn du scheibst nur den Array-Pointer in den Stream. Hast du dich denn noch nicht gewundert, daß immer nur 4 Byte im Stream laden, egal wieviele Daten in dem Array drin sind?
Delphi-Quellcode:
hStream.WriteBuffer(Daten[0], Length(Daten) * SizeOf(TDatensatz));
// oder hStream.WriteBuffer(Daten[0], Length(Daten) * SizeOf(Daten[0])); |
AW: Stream über Indy 10 senden
ok danke
Delphi-Quellcode:
hat das problem gelöst^^ arbeite mich gerade erst in TStream ein.
hStream.Position := 0;
[Edit] der empfang müsste dann demendsprechend auf server seite
Delphi-Quellcode:
sei oder?
fContext.Connection.Socket.ReadStream(aStream,size);
|
AW: Stream über Indy 10 senden
Die Klasse TIdTCPClient hat eine Property IOHandler, in denen die Funktionen zum Lesen / Schreiben aus / in Sockets enthalten sind. (Damit geht es einfacher als mit den Low-Level Funktionen.)
|
AW: Stream über Indy 10 senden
ok dann bin ich wahrscheinlich zublöd die zufinden....
hast du ev mal ein bsp? |
AW: Stream über Indy 10 senden
ich denke mjustin meint IOHandler.Write(WasAuchImmer)
Delphi-Quellcode:
für den Client
IdTCPClient1.IOHandler.Write(streamTest);
am Server dann :
Delphi-Quellcode:
oder schau mal bei
procedure TForm1.IdIOHandlerStream1GetStreams(ASender: TIdIOHandlerStream;
var VReceiveStream, VSendStream: TStream); begin end; ![]() vorbei :-D |
AW: Stream über Indy 10 senden
ok dann bin ich doch nicht zu doof... die habe ich auch schon gefunden :
Delphi-Quellcode:
und siehe Oben verwende sie auch
FSocket.Socket.Write(hStream,hSize);
ob ich jetzt über socket schreibe oder über IOHandler konnte ich noch keine veränderung feststellen... werd aber beides noch mal testen... die server procedure klingt interessant schau ich mir auch mal an danke.... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:03 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