Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi String über Socket senden (https://www.delphipraxis.net/184384-string-ueber-socket-senden.html)

strom 21. Mär 2015 15:15

String über Socket senden
 
Hallo möchte gerne mit Delphi
einen String mit SocketClient1 senden.

Es gibt ein Beispiel für Java
Code:
public class ServerTest {
 public static void main(String[] args) throws Exception {
   StringBuffer buf = new StringBuffer();
   buf.append("<event>\n");// Start-Tag
   buf.append(String.format("<address>%s</address>\n", "123test"));// Code
   buf.append(String.format("<message>%s</message>\n", "Hello World"));// Text
   buf.append("</event>");// End-Tag
   try {
          Socket socket = new Socket("localhost", 5555);// 5555 = Default-Port
          OutputStream os = socket.getOutputStream();
          BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os, "UTF-8"));
          bw.write(buf.toString());
          bw.flush();
          bw.close();
          os.close();
   } catch (Exception e) {
          e.printStackTrace();
   }
 }
}
Wenn ich mir das Beispiel von Java anschaue, wird der String aufgeteilt!
Wie mache ich das?

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
   var
 s: String;
begin
   s := (String.format("<address>%s</address>\n", "123test"));
   ClientSocket1.Socket.SendText(s);
end;

Zacherl 21. Mär 2015 16:04

AW: String über Socket senden
 
Der String wird nicht aufgeteilt, sondern zusammengesetzt. Kannst es folgendermaßen nachbauen:
Delphi-Quellcode:
String.Format(
    '<event>'#10'<address>%s</address>'#10'<message>%s</message>'#10'</event>',
    ['123', 'Text']);

himitsu 21. Mär 2015 16:05

AW: String über Socket senden
 
Die Delphi-Syntax kennst du aber?

\n gibt es so nicht in Delphi
" ist garantiert nicht das Quotierungszeichen für Pascal-Strings
Wie man beim Format die Parameter angibt, solltest du wissen und wenn doch nicht, dann siehe F1
Und nein, wo wird da denn was aufgeteilt? Im Gegenteil, jemand kommt auf die saublöde Idee und bastelt manuell aus einzelnen Strings eine XML-Datei zusammen.
Delphi-Referenz durchsuchenTStringBuilder



So, aber das Wichtigste, warum verwendest du nicht einfach eine richtige REST-API?

strom 21. Mär 2015 16:55

AW: String über Socket senden
 
Hallo,

wenn ich die Strings durch ein EDit1.Text und Memo1.Text ersetze,
geht es leider nicht mehr.

Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
    var
  s: String;
begin
    try
       ClientSocket1.Open;
    s := String.Format(
     '<event>'#10'<address>%s</address>'#10'<message>%s</message>'#10'</event>',
     [Edit1.Text,Memo1.Text]);
    ClientSocket1.Socket.SendText(s);
    finally
      ClientSocket1.Close;
    end;
end;

Zacherl 21. Mär 2015 16:58

AW: String über Socket senden
 
Zitat:

Zitat von strom (Beitrag 1294348)
geht es leider nicht mehr

Sehr präzise :roll:

strom 21. Mär 2015 17:05

AW: String über Socket senden
 
Stimmt:shock:

Das Programm läuft, der Text wird aus dem Memofeld nicht
übernommen.

Hat bestimmt was mit dem Format des Memos zutun oder?

strom 21. Mär 2015 17:11

AW: String über Socket senden
 
Jetzt geht alles ?

Danke

strom 21. Mär 2015 17:55

AW: String über Socket senden
 
Liste der Anhänge anzeigen (Anzahl: 1)
Habe doch noch ein Problem!

Wenn ich kurze Zeit später erneut was senden möchte,
kommt diese Fehlermeldung!





Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
    var
  s: String;
begin
    try
       ClientSocket1.Open;
    s := String.Format(
     '<event>'#10'<address>%s</address>'#10'<message>%s</message>'#10'</event>',
     [Edit1.Text,Memo1.Text]);
    ClientSocket1.Socket.SendText(s);
    ClientSocket1.Close;
    Edit1.Clear;
    Memo1.Clear;
    finally
      ClientSocket1.Free;
    end;
end;

himitsu 21. Mär 2015 17:59

AW: String über Socket senden
 
Wundert mich nicht. :roll:
Zitat:

Delphi-Quellcode:
finally
  ClientSocket1.Free;
end;


Sir Rufo 21. Mär 2015 18:01

AW: String über Socket senden
 
Immer die gleichen:

Erst die Mutter vor die Tür setzen und sich hinterher beschweren, weil die Bude nicht mehr aufgeräumt wird ...

strom 21. Mär 2015 18:46

AW: String über Socket senden
 
Muss ich nicht nach
Delphi-Quellcode:
ClientSocket1.Socket.SendText(s);

wieder was freigeben oder löschen?

Sir Rufo 21. Mär 2015 19:33

AW: String über Socket senden
 
Zitat:

Zitat von strom (Beitrag 1294359)
Muss ich nicht nach
Delphi-Quellcode:
ClientSocket1.Socket.SendText(s);

wieder was freigeben oder löschen?

Du kannst die Tür gerne zumauern, aber wenn du die dann vor dem Durchrennen nicht wieder öffnest, darfst du dich nicht wundern, wenn du gegen die Wand rennst.

Pauschal auf Verdacht irgend etwas freigeben ist keine gute Idee

strom 21. Mär 2015 19:42

AW: String über Socket senden
 
Was muss ich machen?

Die erste Meldung kommt an!
Aber weitere Meldungen nicht!

Sir Rufo 21. Mär 2015 19:44

AW: String über Socket senden
 
Zitat:

Zitat von strom (Beitrag 1294368)
Was muss ich machen?

Wenn du die Instanz hinter
Delphi-Quellcode:
ClientSocket1
nochmal verwenden willst einfach nicht freigeben?

himitsu 21. Mär 2015 19:56

AW: String über Socket senden
 
Zitat:

Zitat von Sir Rufo (Beitrag 1294370)
Wenn du die Instanz hinter
Delphi-Quellcode:
ClientSocket1
nochmal verwenden willst einfach nicht freigeben?

Oder vorher wieder neu erstellen,
aber dann gehört diese Variable/Instanz nur lokal, aber garantiert nicht global und erst Recht nicht auf die Form drauf.

strom 21. Mär 2015 20:29

AW: String über Socket senden
 
Also nochmal von vorn,

Wenn ich den Button drücke, wird die Meldung abgesetzt.

Wenn ich neue Informationen in Edit1 und Memo1 eingebe und den Button drücke
passiert nichts. Wiederhole ich dieses, geht es wieder!

Warum?

Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
    var
  s: String;
begin
    ClientSocket1.Open;
    s := String.Format(
     '<event>'#10'<address>%s</address>'#10'<message>%s</message>'#10'</event>',
     [Edit1.Text,Memo1.Text]);
    ClientSocket1.Socket.SendText(s);
    ClientSocket1.Close;
    Edit1.Clear;
    Memo1.Clear;
end;

Sir Rufo 21. Mär 2015 20:44

AW: String über Socket senden
 
Tja das ist seltsam, vor allem weil das Edit-Feld und das Memo-Feld sollten schon geleert werden oder eine Exception sollte auftauchen ...

himitsu 22. Mär 2015 06:39

AW: String über Socket senden
 
Das Event hängt auch am Button dran? :roll:

strom 22. Mär 2015 13:19

AW: String über Socket senden
 
Hallo,

wen im ClientSocket die Eigenschaften fest eingestellt sind, läuft alles ohne Probleme.
Möchte ich aber den Host über eine ini einlesen, kommt immer eine Fehlermeldung!

"Asynchroner Socket-Fehler 10049"

BadenPower 22. Mär 2015 13:37

AW: String über Socket senden
 
Stimmt die Port-Einstellung?

Sir Rufo 22. Mär 2015 14:36

AW: String über Socket senden
 
Zitat:

Zitat von strom (Beitrag 1294404)
Hallo,

wen im ClientSocket die Eigenschaften fest eingestellt sind, läuft alles ohne Probleme.
Möchte ich aber den Host über eine ini einlesen, kommt immer eine Fehlermeldung!

"Asynchroner Socket-Fehler 10049"

Hast du nach dem Fehler schon mal hier im Forum gesucht oder bei Tante Google?

Warum nicht?

Oder mal in die Doku geschaut?
http://docwiki.embarcadero.com/Libra....TClientSocket
Da gibt es sogar ein Beispiel ...


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:12 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