![]() |
Indy - Records versenden
Hi,
Also ich will mit meinem Client ein ganzen Record an den Server schicken. Ich versuche das im Moment so. Aber das geht noch nicht wirklich :mrgreen: TChatMessage:
Delphi-Quellcode:
Client:
TChatMessage = class // Die Alpha Version der Klasse^^
From: ShortString; Msg: String; end;
Delphi-Quellcode:
Server:
procedure TForm1.FormCreate(Sender: TObject);
begin DSAClient.Port := 1354; // DSAClient = IDTCPClient DSAClient.Host := '192.168.2.102'; // Zu testzwecken meine eigene IP... end; procedure TForm1.Button1Click(Sender: TObject); var Msg : TChatMessage; begin DSAClient.Connect(); Msg.From := Edit1.Text; DSAClient.WriteBuffer(Msg,Sizeof(Integer)); end;
Delphi-Quellcode:
Grüße
procedure TForm1.FormCreate(Sender: TObject);
begin DSA.Active := true; // DSA = IDTCPServer DSA.DefaultPort := 1354; end; procedure TForm1.DSAExecute(AThread: TIdPeerThread); var Msg: TChatMessage; begin AThread.Connection.ReadBuffer(Msg,Sizeof(Integer)); ShowMessage(Msg.From); end; Michael |
Re: Indy - Records versenden
Was heißt "Aber das geht noch nicht wirklich"? Welcher Fehler kommt? Desweiteren kannst du im Execute nicht einfach davon ausgehen das alles auf einmal ankommt was auch auf einmal gesendet wird. Es kann bei großen Daten durchaus passieren (wird sogar die Regel sein) dass, das Execute-Event mehrmals mit kleinen Stücken aufgerufen wird.
|
Re: Indy - Records versenden
Zitat:
|
Re: Indy - Records versenden
ich hab das hier mal gerade überflogen, aber ein möglicher fehler kann sein das bei deinem code hier eine klasse ist und kein record.
dann weiter ist die msg ein dynamischer string (es sei den du hast dem compiler umgeschaltet.
Delphi-Quellcode:
in
TChatMessage = class
From: ShortString; Msg: String; end;
Delphi-Quellcode:
TChatMessage = record
From: ShortString; Msg: ShortString; end;
Delphi-Quellcode:
ist auch nicht so klug weil du die groesse des records ermitteln musst.
Sizeof(Integer)
also lieber Sizeof(TChatMessage) -- ups das war senden - schau dir die indy demos an dort ist ein chatserver mit records drin. records zu versenden ist aber nicht sonderlich klug - weil die längen fest sind. die pakete die du schickt ob "hallo" oder "das ist ein langer text" sind gleich gross und belasten unnötig die leitung/traffic |
Re: Indy - Records versenden
Zitat:
Client:
Delphi-Quellcode:
Server:
procedure TForm1.Button1Click(Sender: TObject);
var Msg : TChatMessage; begin DSAClient.Connect(); Msg.From := Edit1.Text; DSAClient.WriteBuffer(Msg,Sizeof(TChatMessage),true); end;
Delphi-Quellcode:
procedure TForm1.DSAExecute(AThread: TIdPeerThread);
begin AThread.Connection.ReadBuffer(Msg,Sizeof(TChatMessage)); end; procedure TForm1.Button1Click(Sender: TObject); begin Caption := Msg.From; end; Ich muss nur sagen das mir was komisches aufgefallen ist. Wenn ich mit diesem Quellcode dem Server was sende (Egal was im Edit beim Client steht) dann steht nach dem ButtonClick als Caption 'TCustomControl'. Das verwirrt mich irgendwie ^^ |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:59 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