![]() |
String über Socket senden
Hallo möchte gerne mit Delphi
einen String mit SocketClient1 senden. Es gibt ein Beispiel für Java
Code:
Wenn ich mir das Beispiel von Java anschaue, wird der String aufgeteilt!
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(); } } } 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; |
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']); |
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. ![]() So, aber das Wichtigste, warum verwendest du nicht einfach eine richtige REST-API? |
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; |
AW: String über Socket senden
Zitat:
|
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? |
AW: String über Socket senden
Jetzt geht alles ?
Danke |
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; |
AW: String über Socket senden
Wundert mich nicht. :roll:
Zitat:
|
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 ... |
AW: String über Socket senden
Muss ich nicht nach
Delphi-Quellcode:
ClientSocket1.Socket.SendText(s);
wieder was freigeben oder löschen? |
AW: String über Socket senden
Zitat:
Pauschal auf Verdacht irgend etwas freigeben ist keine gute Idee |
AW: String über Socket senden
Was muss ich machen?
Die erste Meldung kommt an! Aber weitere Meldungen nicht! |
AW: String über Socket senden
Zitat:
Delphi-Quellcode:
nochmal verwenden willst einfach nicht freigeben?
ClientSocket1
|
AW: String über Socket senden
Zitat:
aber dann gehört diese Variable/Instanz nur lokal, aber garantiert nicht global und erst Recht nicht auf die Form drauf. |
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; |
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 ...
|
AW: String über Socket senden
Das Event hängt auch am Button dran? :roll:
|
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" |
AW: String über Socket senden
Stimmt die Port-Einstellung?
|
AW: String über Socket senden
Zitat:
Warum nicht? Oder mal in die Doku geschaut? ![]() 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