| Autor |
Beitrag |
schaumermal
      
Beiträge: 72
|
Verfasst: Fr 06.06.08 10:49
Hi,
ich habe folgende Frage:
Wie kann ich den Inhalt, den ich in einem TRichEdit Feld habe über eine Socketverbindung vom Client an den Server übertragen.
Aktuell habe ich nur die Möglichkeit gefunden, mit
Delphi-Quelltext 1:
| Socket.SendText('Meldung an den Server'); |
Text zu übertragen. Ich möchte aber auch gerne die Formatierung (fett, unterstrichen, usw.) übertragen.
Es existiert noch die Methode Socket.SendBuf bei der ich aber nicht weis wie ich diese Nutzen könnte um meinen formatieren Text zu übergeben.
Kann mit hierzu jemand einen Hinweise geben?
Danke und Gruß
Moderiert von Narses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Fr 06.06.2008 um 12:01
Moderiert von Narses: Titel geändert.
|
|
iKilledKenny
      
Beiträge: 394
Erhaltene Danke: 8
Win XP
D5 Prof, C# Express 2005
|
Verfasst: Fr 06.06.08 10:56
RichText ist kein binäres Format, sondern Text mit "Steuerzeichen". Du kannst das also auch mit den Formatierungen als Text übertragen.
|
|
schaumermal 
      
Beiträge: 72
|
Verfasst: Fr 06.06.08 11:08
Hi,
danke für die Info.
Leider kommt aber auf dem Server der Text ohne Formatierung an.
Auf dem Client sende ich mit
Delphi-Quelltext 1: 2: 3: 4:
| procedure TForm1.Button1Click(Sender: TObject); begin ClientSocket.Socket.SendText(fmText.Text); end; |
Auf dem Server empfange ich mit
Delphi-Quelltext 1: 2: 3: 4:
| procedure TForm1.ServerSocketClientRead(Sender: TObject; Socket: TCustomWinSocket); begin fmText.Text:=Socket.ReceiveText; end; |
Moderiert von Narses: Delphi-Tags hinzugefügt
|
|
iKilledKenny
      
Beiträge: 394
Erhaltene Danke: 8
Win XP
D5 Prof, C# Express 2005
|
Verfasst: Fr 06.06.08 11:15
Was ist denn fmText bei dir? Das sollte natürlich auch ein RichEdit sein...
P.S.: Habe eben mal in der Doku geschaut, RichEdit.PlainText := False; könnte evtl. helfen...
|
|
schaumermal 
      
Beiträge: 72
|
Verfasst: Fr 06.06.08 11:22
fmText ist das TRichedit
PlainText steht auf False.
Du hast geschrieben, dass
iKilledKenny hat folgendes geschrieben: | | RichText ist kein binäres Format, sondern Text mit "Steuerzeichen". Du kannst das also auch mit den Formatierungen als Text übertragen. |
Kannst Du mir sagen wie ich ggf. ein binär Format übertragen kann (wenn auch hier ggf. nicht notwendig)?
|
|
iKilledKenny
      
Beiträge: 394
Erhaltene Danke: 8
Win XP
D5 Prof, C# Express 2005
|
Verfasst: Fr 06.06.08 11:44
Habe nochmal in der Doku geschaut. Mein Delphi 5 RichEdit hat gar keine Property "Text"...
Versuch mal
Delphi-Quelltext 1:
| SetWindowText (fmText.Handle, PChar (Socket.ReceiveText)); |
so funktioniert das zumindest bei mir.
Wegen Übertragung von binären Dateien:
Ich verwende eigentlich immer XML zum Übertragen und wandele deshalb meine binären Daten in Text um, bevor ich sie verschicke...
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Fr 06.06.08 12:11
Moin!
schaumermal hat folgendes geschrieben: | | Leider kommt aber auf dem Server der Text ohne Formatierung an. |
Probier das mal so:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure TForm1.Button1Click(Sender: TObject); begin var RTF: TStringStream; begin RTF := TStringStream.Create(''); try RichtEdit1.Lines.SaveToStream(RTF); ClientSocket.Socket.SendText(RTF.DataString); finally RTF.Free; end; end; | Und so lesen:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TForm1.ServerSocketClientRead(Sender: TObject; Socket: TCustomWinSocket); var RTF: TStringStream; begin RTF := TStringStream.Create(Socket.ReceiveText); try RichEdit1.Lines.LoadFromStream(RTF); finally RTF.Free; end; end; | Aber:  - Das wird nur mit Texten funktionieren, die im RTF-Format kleiner als 8KB sind, und
- deine Datenrate klein genug bleibt, um nicht mehrere Datenpakete auf einmal zu lesen
[url=www.delphi-library.d...ml]FAQ-Beitrag[/url]
cu
Narses
//EDIT: Fehler im Code korigiert
_________________ There are 10 types of people - those who understand binary and those who don´t.
Zuletzt bearbeitet von Narses am Di 10.06.08 22:23, insgesamt 2-mal bearbeitet
|
|
schaumermal 
      
Beiträge: 72
|
Verfasst: Fr 06.06.08 14:38
Hi,
danke für Deinen Hinweis.
Allerdings kommt folgende Meldung bei ClientSocket.Socket.SendText(RTF);
[Fehler] USocketClient.pas(101): Inkompatible Typen: 'String' und 'TStringStream'
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Fr 06.06.08 14:40
Moin!
schaumermal hat folgendes geschrieben: | Allerdings kommt folgende Meldung bei ClientSocket.Socket.SendText(RTF);
[Fehler] USocketClient.pas(101): Inkompatible Typen: 'String' und 'TStringStream' |
Jup, hatte was im Code oben vergessen  ist aber jetzt mit drin.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
schaumermal 
      
Beiträge: 72
|
Verfasst: Fr 06.06.08 14:47
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Fr 06.06.08 15:00
Moin!
Bitte.
Auf die Hinweise achten, die Lösung ist unsauber!
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
schaumermal 
      
Beiträge: 72
|
Verfasst: Fr 06.06.08 15:18
Noch eine Nachfrage,
könnte ich auf diesem Weg auch eine Datei übertragen?
Nur zum Verständnis:
Ich muss eine Anwendung erstellen in dem ich über diesen Weg (formatierten Text und ggf. Dateianhang) übertragen kann.
Die Serveranwendung soll mit den empfangenen Daten (also Text und ggf. Dateien) dann mit unserem Exchange Server kommunizieren und Newsletter für unsere Kunden erstellen.
Aus Sicherheitsgründen darf ich nicht direkt mit dem Exchangeserver kommunizieren.
Deswegen möchte ich diese Weg wählen.
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Fr 06.06.08 15:25
Moin!
schaumermal hat folgendes geschrieben: | | Noch eine Nachfrage, |
Normalerweise: neue Frage, neuer Thread!  Aber das ist wohl noch nah genug am Thema.
schaumermal hat folgendes geschrieben: | | könnte ich auf diesem Weg auch eine Datei übertragen? |
Was ist denn "auf diesem Weg" für dich?  Die TCP-Verbindung? Die Art-und-Weise deines Ansatzes?
Grundsätzlich: ja; in der Praxis ist das aber schon etwas schwerer Tutorial zum Binärdatentransfer über die Sockets.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|