AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Stream über Indy 10 senden
Thema durchsuchen
Ansicht
Themen-Optionen

Stream über Indy 10 senden

Ein Thema von 1aa · begonnen am 9. Nov 2013 · letzter Beitrag vom 12. Nov 2013
Antwort Antwort
1aa

Registriert seit: 28. Sep 2008
48 Beiträge
 
Delphi XE5 Enterprise
 
#1

Stream über Indy 10 senden

  Alt 9. Nov 2013, 22:26
Problem:

Erstellter Stream lässt sich nict auf den Socket schreiben es kommt die fehlermeldung : "Keine Daten für den Lesezugriff!"

Code:
Delphi-Quellcode:
 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;
fSocket ist verbunden.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#2

AW: Stream über Indy 10 senden

  Alt 9. Nov 2013, 22:55
Delphi-Quellcode:
hStream.WriteBuffer(Daten, hSize);
hStream.Position := 0;
Setze mal den Positionszeiger wieder auf den Anfang des Streams.

[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]));
$2B or not $2B

Geändert von himitsu ( 9. Nov 2013 um 23:00 Uhr)
  Mit Zitat antworten Zitat
1aa

Registriert seit: 28. Sep 2008
48 Beiträge
 
Delphi XE5 Enterprise
 
#3

AW: Stream über Indy 10 senden

  Alt 9. Nov 2013, 23:11
ok danke hStream.Position := 0; hat das problem gelöst^^ arbeite mich gerade erst in TStream ein.

[Edit]

der empfang müsste dann demendsprechend auf server seite
fContext.Connection.Socket.ReadStream(aStream,size); sei oder?

Geändert von 1aa ( 9. Nov 2013 um 23:44 Uhr)
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#4

AW: Stream über Indy 10 senden

  Alt 10. Nov 2013, 15:39
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.)
Michael Justin
  Mit Zitat antworten Zitat
1aa

Registriert seit: 28. Sep 2008
48 Beiträge
 
Delphi XE5 Enterprise
 
#5

AW: Stream über Indy 10 senden

  Alt 11. Nov 2013, 01:02
ok dann bin ich wahrscheinlich zublöd die zufinden....
hast du ev mal ein bsp?
  Mit Zitat antworten Zitat
4dk2

Registriert seit: 4. Sep 2007
176 Beiträge
 
#6

AW: Stream über Indy 10 senden

  Alt 11. Nov 2013, 16:02
ich denke mjustin meint IOHandler.Write(WasAuchImmer)
  IdTCPClient1.IOHandler.Write(streamTest); für den Client

am Server dann :

Delphi-Quellcode:
procedure TForm1.IdIOHandlerStream1GetStreams(ASender: TIdIOHandlerStream;
  var VReceiveStream, VSendStream: TStream);
begin

end;
oder schau mal bei http://www.delphipraxis.net/39752-st...indy-10-a.html
vorbei
  Mit Zitat antworten Zitat
1aa

Registriert seit: 28. Sep 2008
48 Beiträge
 
Delphi XE5 Enterprise
 
#7

AW: Stream über Indy 10 senden

  Alt 12. Nov 2013, 00:54
ok dann bin ich doch nicht zu doof... die habe ich auch schon gefunden :  FSocket.Socket.Write(hStream,hSize); und siehe Oben verwende sie auch
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....
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:08 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz